XML命名空间前缀:两个片段之间的差异

时间:2016-03-01 12:17:31

标签: xml xml-namespaces

之间有什么区别
<ns:MyRequest xmlns:ns="http://my.namespace">
        <node_a>2016-02-29T08:50:00</node_a>
        <node_b></node_b>
</MyRequest>

<MyRequest xmlns="http://my.namespace">
        <node_a xmlns="">2016-02-29T08:50:00</node_a>
        <node_b xmlns=""></node_b>
</MyRequest>

3 个答案:

答案 0 :(得分:3)

从XML信息模型的角度来看,它们是相同的:如果存在“扩展元素名称”语法这样的东西,那么在这两种情况下文档都是这样的:

<{http://my.namespace}MyRequest>
    <{}node_a>2016-02-29T08:50:00</{}node_a>
    <{}node_b></{}node_b>
</{http://my.namespace}MyRequest>

答案 1 :(得分:2)

正如评论中提到的@potame(现在@ forty-two刚刚在另一个有助于显示扩展名称(+1)的答案中重申),这两种形式是等效的。有无数种词法可以指定等效的命名空间XML。

备注:

  • 它是关联的命名空间URI,而不是最终重要的前缀。
  • 第二种形式使用默认命名空间,该命名空间适用于 子节点,node_anode_b,如果不是xmlns="",则为。{1}} 重置默认值并在{@ 1}}和node_a中没有命名空间, 就像第一种形式一样。

答案 2 :(得分:1)

虽然传统观点认为前缀的选择应该没有区别,但许多编程数据模型(包括DOM和XPath)都会公开前缀,这使得编写那些如果有人选择不同的前缀而停止工作的应用程序非常容易。因此,当我们说“没有差异”时,我们的意思是“正确编写的应用程序应该将它们视为等效”。不幸的是,很多处理XML数据的程序员都不理解XML的微妙特性,所以不正确编写的应用程序很常见。