2010-07-21 136 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)。