xmlns="&引用;一丝不苟

xmlns="&引用;一丝不苟,xml,xsd,namespaces,Xml,Xsd,Namespaces,给出以下(一段)soap调用 <m1:NextCommencementDateInput xmlns:m1="http://foo.bar.com/Types"> <aDate xmlns="">2010-06-02</aDate> </m1:NextCommencementDateInput> 2010-06-02 显然,这与(使用XMLSpy对xsd进行验证时)相同 2010-06-02 那么xmlns=”“到底做了什么 编辑

给出以下(一段)soap调用

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

2010-06-02
显然,这与(使用XMLSpy对xsd进行验证时)相同


2010-06-02
那么xmlns=”“到底做了什么

编辑:我之所以问这个问题,是因为我打电话给第三方,他们现在说我们应该从我们的请求中删除xmlns=“”。然而,我认为它们是相同的,它们应该改变它们的立场。

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

xmlns=“”
清除了默认名称空间(也称为空前缀)的定义。在此声明之后,所有不带前缀的元素都被视为具有空命名空间

所以区别在于:

  • 第一个示例(xmlns=“”)清除空前缀,使aDate元素具有空命名空间

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


此外,如果没有活动的xmlns=“some:namespace”声明来清除…

可能的重复(也相关:),一些XML解析器会抱怨xmlns=“”,我认为这不是重复。Raymond询问了xmlns的具体用途,而您提供的链接一般都在谈论xmlns。事实上,我理解xmlns的用法,但我对空名称空间感到困惑。根据您链接到的规范,它们不一样(但这取决于周围的XML)。这确实取决于上下文。我把这个例子作为一个完整的文件。
<m1:NextCommencementDateInput xmlns:m1="http://foo.bar.com/Types">
    <aDate>2010-06-02</aDate>
</m1:NextCommencementDateInput>