我試圖在R中構建一個如下所示的XML結構。注意默認名稱空間,其它的命名空間,並且內Name
對象,它是在可替換的名稱空間:使用命名空間在R中創建XML
<?xml version = "1.0" encoding="UTF-8"?>
<sld xmlns="http://www.o.net/sld"
xmlns:ogc="http://www.o.net/ogc"
xmlns:se="http://www.o.net/se"
version="1.1.0" >
<layer>
<se:Name>My Layer</se:Name>
</layer>
</sld>
此代碼接近,具有在標籤還行,但在根標記沒有默認命名空間的名稱空間:
require(XML)
makesimple = function(){
z = xmlTree("sld",
namespaces=list(
"ogc"="http://www.o.net/ogc",
"se"="http://www.o.net/se"),
attrs=list(version="1.1.0")
)
z$addNode("layer", close=FALSE)
z$setNamespace("se")
z$addNode("Name","My Layer")
z$closeTag()
z
}
> cat(saveXML(makesimple()))
給
<?xml version="1.0"?>
<sld
xmlns:ogc="http://www.o.net/ogc"
xmlns:se="http://www.o.net/se"
version="1.1.0">
<layer>
<se:Name>My Layer</se:Name>
</layer>
</sld>
但是,如果我添加一個默認(未命名)命名空間,然後設置命名空間內構件什麼都不做。更改一行上面:
z = xmlTree("sld",
namespaces=list("http://www.o.net/sld",
"ogc"="http://www.o.net/ogc",
"se"="http://www.o.net/se"),
attrs=list(version="1.1.0")
)
這給了我:
<?xml version="1.0"?>
<sld
xmlns="http://www.o.net/sld"
xmlns:ogc="http://www.o.net/ogc"
xmlns:se="http://www.o.net/se"
version="1.1.0">
<layer>
<Name>My Layer</Name>
</layer>
</sld>
擁有所有根元素正確的命名空間,但我想爲內部元件的命名空間已經沒有了。
注意,我開始這方面的工作與newXMLDoc
和newXMLNode
功能,直到我讀這說的文檔:
While the functions are available, their direct use is not encouraged. Instead, use ‘xmlTree’ as the functions need to be used within a strict regime to avoid corrupting C level structures.
我在放棄與package::XML
建造這些東西的點只是用模板系統構建它們(大概是package::brew
)。
您可以通過執行'setXMLNamespace(Z $ ADDNODE( 「姓名」, 「我的層」), 「SE」)',甚至管它消除了'nameNode'變量:'Z $ ADDNODE(」名稱「,」我的圖層「)%>%setXMLNamespace(」se「)'。 – Spacedman