xml - 能否在 XML 文档中重用相同的命名空间

标签 xml xml-parsing

XML 文档两次使用相同的命名空间前缀是否有效?

在下面的文档中,s 前缀被使用了两次,但是在嵌套元素中,URI 是不同的。

有效吗?

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark">
    <fx:Declarations>
        <s:MyObject xmlns:s="library://ns.mysite.com">
            <s:Paragraph>hello world</s:Paragraph>
        </s:MyObject>
    </fx:Declarations>
</s:Application>

最佳答案

是的,前缀本身没有特别的意义——只是作为命名空间的别名。

完全有效的 XML,每个节点名称都具有唯一的命名空间,即使它们都具有相同的前缀也是如此:

<a:r xmlns:a="urn:one">
   <a:p xmlns:a="urn:two">
        <a:c xmlns:a="urn:three">
        </a:c>
   </a:p>
</a:r>

它也适用于空(默认)前缀,也可以为每个节点更改。以下是有效的 XML,每个节点都以自己的命名空间命名,甚至没有前缀:

<r xmlns="urn:one">
   <p xmlns="urn:two">
        <c xmlns="urn:three">
        </c>
   </p>
</r>

请注意,XPath 选择器中的前缀与任何给定 XML 文档中的前缀无关,并且必须具有单独的前缀到命名空间的映射。同样在 XPath 中,前缀必须有唯一的映射(没有标准,映射是特定于每个 Xml DOM 实现的)。

例如,对于本文中的第一个 XML,您不能使用类似于“/a:r/a:p/a:c”这样的 XML 的 XPath,因为每个前缀必须映射到不同的命名空间。 Xpath 看起来像“/p1:r/p2:p/p3:c”,带有前缀 {p1->urn:one, p2->urn:two, p3->urn:three} 的映射。

关于xml - 能否在 XML 文档中重用相同的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41774652/

相关文章:

java - 使用xml解析查找word文档中的隐式分页符

android - 在父布局中显示图像的一部分

xml - 如何将 XSLT 模板应用于与文档中另一个元素的数量一样多的元素?

ios - 根据数据对数组进行排序

javascript - 用字符串中包含的一些 HTML 替换 HTML 元素

xml - 使用 XML::LibXML 遍历节点

c# - 如何使用 C# 获取 XML 节点的下一个文本?

java - Tapestry XML 输出

android - 为什么不能为容器设置 max_width?

java - DOM 的子元素