2015-07-19 133 views
0

我想使用SelectSingleNode獲取節點的屬性值。我已經檢查過here使用SelectSingleNode獲取屬性值

我想這些選擇已經但是他們返回一個空引用異常:。 node.SelectSingleNode( 「/ @ ID」)的innerText node.SelectSingleNode( 「@ ID」)的innerText

這裏的部分XML我試圖解析:

<?xml version="1.0" encoding="utf-8"?> 
    <products> 
     <product ID="4de"> 
      <name>Prod name</name> 
     </product> 
     <product ID="4dea"> 
      <name>Prod name 2</name> 
     </product>  
</products> 


Dim productXML As New XmlDocument 
Dim node As XmlNode 
Dim root As XmlNode 
productXML.LoadXml(responseString) 
Dim mgr As XmlNamespaceManager = New XmlNamespaceManager(productXML.NameTable) 
mgr.AddNamespace("test", productXML.DocumentElement.NamespaceURI) 

root = productXML.DocumentElement 
Dim nodeList As XmlNodeList = root.SelectNodes("/products/product") 

'to get the product title (this works): 
node.SelectSingleNode("name").InnerText 

我怎樣才能得到的product節點通過SelectSingleNode的「ID」屬性值?

回答

2

注意XML是大小寫敏感的,所以你應該已經使用大寫@ID代替:

node.SelectSingleNode("@ID").InnerText 

演示(在C#):https://dotnetfiddle.net/TWMUlD

var xml = @" <products> 
     <product ID='4de'> 
      <name>Prod name</name> 
     </product> 
     <product ID='4dea'> 
      <name>Prod name 2</name> 
     </product>  
</products>"; 
var root = new XmlDocument(); 
root.LoadXml(xml); 
var nodeList = root.SelectNodes("/products/product"); 
foreach (XmlNode node in nodeList) 
{ 
    var id = node.SelectSingleNode("@ID").InnerText; 
    Console.WriteLine(id); 
} 

輸出:

4de 
4dea