我正在使用pugi XML解析XML,这不是名称空间 - 意识到的解析器(请参阅使用Boost来读取和编写XML文件)。我试图弄清楚这可能是一个问题,但是问题是我不100%理解使用哪些XML名称空间。
这是一些有问题的XML(我创建的)的示例:
<Results>
<Documents xmlns:active="...">
<Document>...</Document>
</Documents>
<Documents xmlns:archived="...">
<Document>...</Document>
<Document>...</Document>
<Document>...</Document>
<Document>...</Document>
</Documents>
</Results>
给定XPATH表达式(例如/Results/Documents/Document
),Pugi可以为我做的就是提取所有<Document>
元素 - 我会丢失活动/存档的信息。但是,我不确定我是否曾经在现实世界中遇到这种命名空间的使用。似乎在这种情况下,最好使用一个属性来浏览活动/存档的信息。有人可以帮助我更好地了解使用的情况名称空间,这样我就可以通过坚持使用Pugi XML来获得更好的想法?
尽管默认命名空间声明(例如xmlns="http://www.example.com"
)和名称空间前缀声明(例如xmlns:e="http://www.example.com"
)类似于属性,但XML名称空间的目的与XML属性完全不同。
XML名称空间的目的是允许独立开发的XML词汇量合并在单个XML文档中,同时提供一种与词汇相关联的方式,也可以避免词汇之间碰撞碰撞的方式。/strong>
XML属性的目的是表示数据或元数据。(请参阅XML属性与XML元素。)
您是否可以接受任何给定XML或XPATH处理器对XML名称空间的支持程度将取决于(不支持)的详细信息以及您的需求细节。但是,请注意,违规行为具有严重的劣势:您已经见证了合规性和不合格处理器之间令人惊讶的分歧,在同一XML文档中,相同的XPath返回了完全不同的结果。互操作性更喜欢合规性。