使用XML名称空间前缀和指定xmlns=";诸如此类;作为属性

使用XML名称空间前缀和指定xmlns=";诸如此类;作为属性,xml,xml-namespaces,Xml,Xml Namespaces,以下xml片段在名称空间方面有什么不同(如果有的话) 表格1 <prf:XmlElement1 xmlns:prf="namespacename"> ...snip... </prf:XmlElement1> 剪 表格2 <XmlElement1 xmlns="namespacename"> ...snip... </XmlElement1> 剪 我正在与一个web服务交互,当元素的名称空间如Form2中所述时,它会阻塞元素

以下xml片段在名称空间方面有什么不同(如果有的话)

表格1

<prf:XmlElement1 xmlns:prf="namespacename">
   ...snip...
</prf:XmlElement1>
表格2

<XmlElement1 xmlns="namespacename">
   ...snip...
</XmlElement1>

我正在与一个web服务交互,当元素的名称空间如Form2中所述时,它会阻塞元素,但如果名称空间如Form1中所述,则工作正常。不幸的是,我无法说服我的web服务框架发出类似Form1的元素;到目前为止,我所能得到的最好结果是Form2。在我看来,这两种形式都正确地指定了名称空间,这可能是web服务方面的一个错误。

@marc_s已经在他的评论中解释了区别

另外,@JohnSaunders可能是正确的,因为服务已中断。使用默认名称空间破坏文档的一个可能原因是服务可能依赖于硬编码的名称空间前缀。您可以通过向它提供一个使用相同名称空间但前缀不同于
prf
(或它总是使用的任何名称空间)的文档来验证这一点。还要注意,如果没有为前缀声明名称空间,请确保不要在元素名称或属性名称中的任何位置使用该前缀。使用未声明的前缀会导致文档(命名空间)格式不正确


如果文档是用DTD验证的,那么功能正常的XML服务也可能依赖于固定的名称空间前缀。与其他模式语言不同,DTD不知道名称空间,因此处理名称空间声明很困难,因此声明和前缀的位置可能是固定的。

与您交互的web服务已损坏。它显然不理解XML。Form2只是将给定的XML名称空间描述为默认名称空间—应用的名称空间没有显式前缀。因此,从功能上讲,这两个XML片段应该是等效的——都在相同的给定XML名称空间中描述了一些XML结构——只需使用两种不同的方法来获得它们。这正是我所怀疑的,无论出于什么原因(我在指责疲劳),我都无法在规范中找到它。作为记录: