您可以在XML文档中重用相同的命名空间吗?

时间:2017-01-21 00:55:31

标签: 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>

1 个答案:

答案 0 :(得分:3)

是的,前缀本身没有特定含义 - 仅作为命名空间的别名。

完全有效的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,您不能拥有类似于XML的XPath,例如&#34; / a:r / a:p / a:c&#34;因为每个前缀必须映射到不同的名称空间Xpath看起来像&#34; / p1:r / p2:p / p3:c&#34;映射前缀{p1-> urn:one,p2-&gt; urn:two,p3-&gt; urn:three}。

相关问题