2010-07-21 132 views
0

我正在使用带有两个命名空间的XML DOM文档。例如,考虑以下文件: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>[email protected]</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)何时,我将特定文档的节点(具有默认命名空间)复制到另一个文档中,节点是否保留原始命名空间,或者它们是否将占据复制这些节点的新文档的默认命名空间?如果后者是真的,我该如何保留原来的命名空间?

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

感谢, Sidhartha的

回答

0

命名空间教程看到thisthis。和this

现在对于你的问题:

  1. xmlns的声明默认命名空间 - >如果你没有前缀的默认命名空间将被搜索的元素定义的元素。
  2. 如果我的理解正确,那么对于没有前缀的节点getNameSpaceURI将返回默认命名空间(如果没有声明默认命名空间,则返回null)。
  3. 解决方案取决于您使用哪些工具(XSLT,.net包装等)来进行复制。如果你使用.net做什么拷贝请看this教程(重要节点:正确移动节点使用ImportNode)。