【问题标题】:Elements without namespace in XMLXML 中没有命名空间的元素
【发布时间】:2015-04-17 13:22:39
【问题描述】:

这是一个没有默认命名空间的格式良好的 XML。

<?xml version="1.0" encoding="UTF-8"?>
<Zoo xmlns:Staff="URN:STAFF" xmlns:Animal="URN:ANIMAL">
    <Staff:Security name="John" surname="Connor"/>
    <Animal:Dog name="Hachico"/>
    <Visitor name="Arnold" surname="Schwarzenegger"/>
</Zoo>
  1. 标签Animal:Dog的name属性在哪个命名空间中?
  2. 在哪个命名空间中有元素Visitor

【问题讨论】:

    标签: xml


    【解决方案1】:

    它们根本不在任何命名空间中。

    relevant section of the XML Namespaces spec 包含以下声明:

    如果范围内没有默认命名空间声明,则命名空间名称没有值。

    在该规范的术语中,“扩展名称”由一对值组成,即“命名空间名称”和“本地名称”。所以你可以将&lt;Animal:Dog /&gt; 元素表示为{'URN:ANIMAL', 'Dog'},将&lt;Visitor /&gt; 元素表示为{null, 'Visitor'}

    this related question 中所讨论的,无前缀属性有点奇怪,因为即使在范围内,它们也不采用默认命名空间:

    无前缀属性名称的命名空间名称始终没有值。

    许多人会松散地将属性解释为与其所在的元素在同一个命名空间中,但从技术上讲并非如此。 &lt;Animal:Dog name="Hachico" /&gt; &lt;Animal:Dog Animal:name="Hachico" /&gt; 相同。

    【讨论】:

      【解决方案2】:

      对问题 1 的回答: Animal:Dog in namespace "URN:ANIMAL" 前缀为标签"Animal"

      回答问题 2: 元素"Visitor" 不属于任何命名空间。

      当一个元素没有前缀时,它可以是 a) 属于默认命名空间,或者根本没有命名空间。 要查看是否有默认命名空间,请在文件顶部查找 xmlns="namespace",注意缺少的冒号。

      【讨论】:

        猜你喜欢
        • 2015-09-05
        • 2013-02-18
        • 2016-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-28
        • 2012-12-31
        相关资源
        最近更新 更多