2012-07-02 67 views
0

嗨,有誰能幫助我。我有一個包含我自己的命名空間xmlns:NS的XML。我需要選擇包含名稱空間「NS」的所有節點。我們如何使用C#.net來做到這一點。使用C#選擇XML中具有名稱空間的所有節點

我試圖象下面這樣:

XmlDocument doc=new XmlDocument(); 
doc.Load(Path); 
XmlNodeList oNodeList=doc.GetElementByTagname("NS:Text"); 

我在這裏得到所有這些都是節點「NS:文本」的命名空間。但我需要選擇如下所示的所有節點:

XmlDocument doc=new XmlDocument(); 
doc.Load(Path); 
XmlNodeList oNodeList=doc.GetElementByTagname("NS"); 

這樣我就可以選擇包含名稱空間「NS」的所有節點。但這不起作用。我們怎樣才能做到這一點?

以下是我的XML格式。

<xml 1.0 ?> 
    <Root xmlns:NS="www.yembi.com"> 
     <NS:Entry Value="User"> 
      <table> 
       <tr> 
        <td> 
         <NS:display type="Label" name="First Name"> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <NS:Text type="Text"> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <NS:Button Type="SubmitButton" name="submit"> 
        </td> 
       </tr> 
      </table> 
     </NS:Entry> 
+1

您是否可以使用LINQ to XML來代替?那會很容易。 –

+0

您的示例Xml格式不正確。 –

+0

編輯後,您的示例Xml格式仍不完整。正如你的格式化所顯而易見的,''永遠不會關閉。另外,''和其他元素都沒有關閉。此外,第一行應該讀取'<?xml version =「1.0」?>'。 –

回答

0

您可以使用SelectNodes method的XPath表達式。

XmlDocument doc = new XmlDocument(); 
doc.Load(Path); 

XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable); 
mgr.AddNamespace("NS", "www.yembi.com"); 
XmlNodeList oNodeList = doc.SelectNodes("//NS:*", mgr); 

XPath表達式//NS:*選擇具有NS前綴的任何元件。

關於你的問題的一個注意事項:NS不是Xml文檔中的命名空間,它只是一個命名空間前綴。 www.yembi.com是你的名字空間。

您可以將前綴視爲連接命名空間和文檔中標識符的名稱空間的本地(在文檔中)佔位符。您可以輕鬆更改與XPath相關的代碼中的佔位符(例如x),並將NS保留在文檔中,只要它仍然是名稱空間www.yembi.com,它們仍然可以工作。

+0

是的,我也試過這個。我在oNodeList中計數爲零。我們可以以其他任何方式來完成。 – watraplion

+0

@ user1493082:對於我而言,在從您的問題中更正Xml文檔後,在Xml編輯器中測試它時適用於我。文檔是否正確加載?你有沒有可能改變命名空間URI? –

+0

是的,這是現在的工作..非常感謝.. :) – watraplion

1

我想建議LINQ to XML,如果你有.NET Framework 3.5或更高版本。

XDocument doc = XDocument.Load(Path); 

    XNamespace ns = "www.yembi.com"; 
    var result = doc.Root.Descendants() 
        .Where(p => p.GetPrefixOfNamespace(ns) == "NS"); 
+0

是啊這是現在工作..非常感謝... – watraplion

相關問題