2014-12-31 136 views
1

IDE:VS 2010的WinForms,如何從XmlDocument中選擇具有命名空間的節點?

我有一個XML字符串

string xmlstr = "<string xmlns="http://example.com/proj1">True|Success</string>";  

我想選擇<string>節點,以獲得其InnerText後續解析:

True|Success 

使用以下代碼:

XmlDocument xdoc = new XmlDocument(); 
xdoc.LoadXml(xmlstr);   
string message = xdoc.SelectSingleNode("string").InnerText; //Here getting null Execption error. 

你能告訴我如何從xml中選擇此消息嗎?

+0

您的XPath應該是'// string' –

+0

這個問題經常被問到,很難從衆多可用的重複項中進行選擇。 – Tomalak

+0

@Tomalak我不會說這是重複的。 – t3chb0t

回答

2

您需要添加一個XmlNamespaceManager能夠選擇節點:

XmlNode.SelectSingleNode Method (String, XmlNamespaceManager)

string xmlstr = "<string xmlns=\"http://example.com/proj1\">True|Success</string>";  
XmlDocument xdoc = new XmlDocument(); 
xdoc.LoadXml(xmlstr); 

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable); 
nsmgr.AddNamespace("ab", "http://example.com/proj1"); 

XmlNode stringNode = xdoc.SelectSingleNode("//ab:string", nsmgr); 
string message = stringNode.InnerText; 

除了你的XML字符串中的示例無效,因爲它內部包含雙引號未逃脫。

+0

@Tomalak我修正了這個例子。無論如何,建議的'XPath'不會起作用(它不會),因爲節點包含一個命名空間,並且需要一個'XmlNamespaceManager'。 – t3chb0t

+0

...現在它完全符合我鏈接到的副本。 ;) – Tomalak

+1

@Tomalak哦,對不起,我不想複製它。我實際上並沒有意識到在另一個問題中使用了命名空間;]並且自己解決了它......現在我對我感到很頭痛; - ]我會感到羞恥,因爲我錯過了這個信息, 。 – t3chb0t

相關問題