【问题标题】:Difference between using an XML namespace prefix and specifying an xmlns="blah" as an attribute使用 XML 命名空间前缀和指定 xmlns="blah" 作为属性之间的区别
【发布时间】:2011-12-22 20:03:26
【问题描述】:

关于命名空间,以下 xml sn-ps 之间有什么区别(如果有)?

Form1

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

Form2

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

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

【问题讨论】:

  • 您与之交互的 Web 服务已损坏。它显然不理解 XML。
  • Form2 只是将给定的 XML 命名空间描述为 default 命名空间 - 无需显式前缀即可应用的命名空间。所以在功能上,这两个 XML 的 sn-ps 应该是等价的——它们都在同一个给定的 XML 命名空间中描述了一些 XML 结构——只是使用两种不同的方法来实现

标签: xml xml-namespaces


【解决方案1】:

@marc_s 已经在他的评论中解释了有什么区别。

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

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

【讨论】:

猜你喜欢
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多