【问题标题】:XML DOM conflicting namespace issuesXML DOM 冲突命名空间问题
【发布时间】:2010-07-21 05:34:48
【问题描述】:

我正在使用具有两个命名空间的 XML DOM 文档。例如,考虑以下文档:

<entry xmlns="http://www.w3.org/2005/Atom" xmlns:libx="http://libx.org/xml/libx2">
  <id>5</id>
  <title>Put Google Book results into Addison</title>
  <updated>2009-02-23T10:12:15Z</updated>
  <author>
    <name>LibX Team</name>
    <uri>http://libx.org</uri>
    <email>libx.org@gmail.com</email>
  </author>
  <libx:libapp>
    <libx:entry xmlns:libx="http://libx.org/xml/libx2" src="6"/>
    <libx:entry xmlns:libx="http://libx.org/xml/libx2" src="7"/>
  </libx:libapp>
</entry>

我对命名空间有以下疑问:

1) 如果我没有像上面的示例那样在节点(id、标题、作者等)前面添加命名空间,是否会为它们分配默认命名空间:“http://www.w3.org/2005/Atom”?如果不是,它们将被分配到哪个命名空间?

2) Node 的 getNameSpaceURI 方法返回 - 节点的命名空间 URI,如果未指定,则返回 null。但是,如果未指定节点的命名空间,我如何知道它。意思是有没有办法知道默认命名空间是否分配给节点或是否分配了其他命名空间?

3) 当我将特定文档的节点(具有默认命名空间)复制到另一个文档中时,这些节点会保留原始命名空间还是会占用这些节点复制到的新文档的默认命名空间?如果后者是真的,我如何保留原来的命名空间?

最后,有人能指点我一个好的在线资料来更好地理解这些冲突的命名空间问题吗?

谢谢, 悉达多

【问题讨论】:

    标签: xml dom namespaces xml-namespaces


    【解决方案1】:

    有关命名空间教程,请参阅thisthis。和this

    现在回答你的问题:

    1. 使用 xmlns 声明默认命名空间 -> 如果您不为元素添加前缀,则会在默认命名空间中搜索元素定义。
    2. 如果我的理解是正确的,对于非前缀节点getNameSpaceURI 将返回默认命名空间(如果没有声明默认命名空间,则返回 null)。
    3. 解决方案取决于您用于复制的工具(XSLT、.net 包装器等)。如果您要使用 .net 进行复制,请查看 this 教程(重要节点:要正确移动节点,请使用 ImportNode)。

    【讨论】:

      猜你喜欢
      • 2012-02-06
      • 2023-03-20
      • 2010-09-20
      • 1970-01-01
      • 2013-01-26
      • 2010-11-15
      • 2012-12-18
      相关资源
      最近更新 更多