xmlns =“”究竟意味着什么

时间:2010-07-06 07:52:57

标签: xml xsd namespaces

给出以下(片段)肥皂呼叫;

<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 =“”。然而,我认为他们是一样的,他们应该改变他们的一面。

2 个答案:

答案 0 :(得分:5)

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

所以区别在于:

  • 第一个示例(使用xmlns =“”)清除空前缀,以便aDate元素具有null名称空间。

  • 第二个例子不清楚它。 aDate元素的命名空间依赖于包含范围的名称空间声明。如果存在活动的xmlns =“some:namespace”声明,则aDate将具有此命名空间。否则它将具有null名称空间。

另外一些XML解析器抱怨xmlns =“”如果没有活动的xmlns =“some:namespace”声明要清除......

答案 1 :(得分:1)

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