2010-03-05 78 views
1

我想在C#中以最簡單的方式獲取comp1的值。我希望能夠與需要至少checkes像主元素是否是有辦法做到這一點,等如何從xml直接獲取值(最好使用XPath)?

// pseudo code 
xmlItem = root.SelectSingleNode "/Primary/Complex?Name='comp1'" 

這樣我就可以檢查是否xmlItemnull,或者沒有元素,而不是每次訪問子節點時都進行多次檢查。這裏是xml,但實際的是更多的嵌套,但只有葉xml節點具有我們正在尋找的特定名稱。

<?xml version="1.0" ?> 
<Primary Type=""> 
    <Simple Name="smp"></Simple> 
    <Complex Name="comp0" Value="123"></Complex> 
    <Complex Name="comp1" Value="456"></Complex> 
    <Complex Name="comp2" Value="789"></Complex> 
</Primary> 
+0

恕我直言,C#+ XML +最佳實踐= LINQ to XML(至少3.5),而不是XPath。查看System.Xml.Linq中的XElement和XDocument。 – TrueWill 2010-03-05 21:52:06

回答

3
var xmlItem = root.SelectSingleNode("/Primary/Complex[@Name='comp1']/@Value"); 
2

嘗試

root.SelectSingleNode("/Primary/Complex[@Name='comp1']/@Value"); 
5

我覺得XPath是/Primary/Complex[@Name='comp0']/@Value

順便說一句,你的XML是錯誤的。簡單沒有結束標籤,材質沒有開始標籤。我假設</Material>應該是</Simple>

+0

是的,這是我的錯誤。 – 2010-03-05 21:19:44

0

您將要使用System.Xml.XPath命名空間中的XPathDocument和XPathNavigator。

XPathDocument fileToParse = new XPathDocument(FullPathToFile); 
XPathNavigator fileNavigator = fileToParse.CreateNavigator(); 
XPathNavigator selected = fileNavigator.SelectSingleNode("./Primary/Complex[@Name='comp1']/@Value"); 
//selected will be null if your XPath doesn't select anything... 
if(selected != null){ Console.WriteLine(selected.Value); }