在XML命名空间的使用[复制](Namespace usage in XML [duplicate]

2019-09-27 17:41发布

这个问题已经在这里有一个答案:

  • Pugixml -解析命名空间前缀映射和不带前缀mappig 1个回答

我使用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坚持失去了一个更好的主意的情况呢?

Answer 1:

虽然默认命名空间声明(例如xmlns="http://www.example.com" ),并命名空间前缀声明(如xmlns:e="http://www.example.com" )类似的属性,XML命名空间成为一个完全不同的用途比XML属性。

XML命名空间的目的是为了让自主开发的XML词汇到一个XML文档中,同时提供一个既为名字与一个词汇和办法避免的词汇之间的命名冲突相关的方式进行组合。

XML属性的目的是表示数据或元数据。 (参见XML属性VS XML元素 )。

无论是任何给定的XML或XPath处理器程度的支持XML名称空间是可以接受的,你将取决于什么(不)两者的细节支持,以及您的需求的细节。 不过请注意,即违规有一个严重的缺点:你已经目睹了符合和不符合之间令人惊讶的分歧处理器在相同的XPath返回完全不同的结果为相同的XML文档。 互操作性喜欢达标。



文章来源: Namespace usage in XML [duplicate]