2016-11-26 113 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文档返回完全不同的结果。互操作性更喜欢合规性。