2016-11-26 100 views
1

我使用pugi xml解析XML,它不是名稱空間感知解析器(請參閱Using Boost to read and write XML files)。我試圖弄清楚這可能有多大的問題,但問題是我不能100%理解XML名稱空間的用途。XML中的命名空間使用

下面是一些XML的例子(我創建的),這將是有問題的:

<Results> 
    <Documents xmlns:active="..."> 
     <Document>...</Document> 
    </Documents> 
    <Documents xmlns:archived="..."> 
     <Document>...</Document> 
     <Document>...</Document> 
     <Document>...</Document> 
     <Document>...</Document> 
    </Documents> 
</Results> 

鑑於像/Results/Documents/Document XPath表達式,所有pugi我可以做的是提取所有<Document>元素 - 我d丟失活動/存檔信息。但是,我不確定我是否會在現實世界中遇到過這種類型的命名空間。在這種情況下,似乎更好地使用屬性來查看活動/歸檔信息。有人能幫助我更好地理解命名空間的使用情況,所以我可以通過堅持使用pugi xml來更好地瞭解我會失去什麼?

+0

該文檔暗示[namespace-uri()'XPath函數存在](http://pugixml.org/docs/manual.html#v0.5),並且[您可以通過其名稱空間前綴來選擇節點](http://pugixml.org/docs/manual.html#xpath.w3c)。所以,pugixml看起來並不完全是名稱空間不知道的。 – Tomalak

回答

1

儘管默認名稱空間聲明(例如xmlns="http://www.example.com")和名稱空間前綴聲明(例如xmlns:e="http://www.example.com")與屬性類似,但XML名稱空間的用途與XML屬性完全不同。

XML名稱空間的目的是允許將獨立開發的XML詞彙表合併到單個XML文檔中,同時提供名稱與詞彙關聯的方式以及避免詞彙表之間命名衝突的方法。

XML屬性的目的是表示數據或元數據。 (請參閱XML attribute vs XML element。)

任何給定的XML或XPath處理器對XML名稱空間的支持程度是否可以接受取決於(不)支持的內容的細節以及您的需求的具體情況。但請注意,不合規具有嚴重的缺點:您有already witnessed surprising disagreement between compliant and noncompliant處理器,其中相同的XPath對同一個XML文檔返回完全不同的結果。互操作性更喜歡合規性。