【问题标题】:Namespace usage in XML [duplicate]XML 中的命名空间使用 [重复]
【发布时间】:2016-11-26 02:37:33
【问题描述】:

我正在使用 pugi xml 解析 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 可以为我做的就是提取所有&lt;Document&gt; 元素——我会丢失活动/存档信息。但是,我不确定我是否曾经在现实世界中遇到过这种类型的命名空间使用。在这种情况下,似乎最好使用属性来获取活动/存档信息。有人可以帮助我更好地了解使用命名空间的情况,以便我可以更好地了解坚持使用 pugi xml 会失去什么?

【问题讨论】:

标签: xml xml-namespaces pugixml


【解决方案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 文档返回完全不同的结果。互操作性优先于合规性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多