XML DOM冲突的命名空间问题

时间:2010-07-21 05:34:49

标签: xml dom namespaces xml-namespaces

我正在使用带有两个名称空间的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,title,author等)的前缀,那么它们是否会被赋予默认命名空间:“http://www.w3.org/2005/Atom”?如果不是,它们将被分配给哪个名称空间?

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

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

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

谢谢, Sidhartha的

1 个答案:

答案 0 :(得分:0)

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

现在提出您的问题:

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