【问题标题】:What does xmlns="" exactly meanxmlns="" 究竟是什么意思
【发布时间】:2011-03-12 04:43:16
【问题描述】:

鉴于以下(部分)肥皂电话;

<m1:NextCommencementDateInput xmlns:m1="http://foo.bar.com/Types">
    <aDate xmlns="">2010-06-02</aDate>
</m1:NextCommencementDateInput>

显然这与(使用 XMLSpy 对 xsd 进行验证时)相同

<m1:NextCommencementDateInput xmlns:m1="http://foo.bar.com/Types">
    <aDate>2010-06-02</aDate>
</m1:NextCommencementDateInput>

那么 xmlns="" 究竟做了什么?

编辑:详细说明我问这个的原因是因为我打电话给第三方,他们现在说我们应该从我们的请求中删除 xmlns="" 。然而我认为他们是一样的,他们应该改变他们的立场。

【问题讨论】:

标签: xml xsd namespaces


【解决方案1】:

xmlns="" 清除默认命名空间的定义(又名空前缀)。在此声明之后,所有没有前缀的元素都被认为具有空命名空间。

所以区别是:

  • 第一个示例(使用 xmlns="")清除空前缀,因此 aDate 元素具有空命名空间。

  • 第二个例子没有清除它。 aDate 元素的命名空间取决于包含范围内的命名空间声明。如果有活动的 xmlns="some:namespace" 声明,aDate 将具有此命名空间。否则它将有空命名空间。

此外,如果没有要清除的活动 xmlns="some:namespace" 声明,一些 XML 解析器会抱怨 xmlns=""...

【讨论】:

    【解决方案2】:

    根据XML Namespace specification (§6.2),除了额外属性本身(您的实现可能会或可能不会对您隐藏)之外,它们完全相同。

    【讨论】:

    • 根据您链接到的规范,它们相同(但取决于周围的 XML)。
    • 这确实取决于上下文。我把这个例子作为一个完整的文档。
    猜你喜欢
    • 1970-01-01
    • 2014-10-29
    • 2016-01-27
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2018-07-27
    相关资源
    最近更新 更多