我正在使用pugi xml解析XML,而pugi xml不是名称空间感知解析器(请参阅Using Boost to read and write XML files)。我试图弄清楚这可能有多大问题,但问题是我不能100%理解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>
元素 - 我将丢失活动/存档信息。但是,我不确定我是否曾在现实世界中遇到过这种类型的命名空间。在这种情况下,最好使用属性来获取活动/存档信息。有人可以帮助我更好地理解命名空间的使用情况,这样我可以通过坚持使用pugi xml来更好地了解我会失去的东西吗?
答案 0 :(得分:1)
尽管默认名称空间声明(例如create view v_table as
select . . .,
(case when is_deleted then 'This comment has been deleted'
else comment
end) as comment
from t;
)和名称空间前缀声明(例如xmlns="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文档返回完全不同的结果。互操作性更符合要求。