2011-02-25 62 views
0

我試圖通過名稱提取xml元素,下面的代碼不起作用,但它確實返回所有4個元素,下面是我的xml文件。一次提取一個xml元素

我想是提取弗里斯特元素(StripImages)[0] ???

var xmlDoc = new XmlDocument(); 
xmlDoc.Load(menuUrl); 
var stripImages = xmlDoc.GetElementsByTagName("StripImage"); 

<Main> 
<Author> 
....... 
<StripImage>true</StripImage> 
</Author> 
<Author> 
....... 
<StripImage>true</StripImage> 
</Author> 
<Author> 
....... 
<StripImage>true</StripImage> 
</Author> 
<Author> 
....... 
<StripImage>true</StripImage> 
</Author> 
</Main> 

回答

1

如果你只是想在第一次使用

stripImages[0] 

stripImages.First() 

**第二隻有當你有Linq-Xml擴展名被引用並且導入System.Linq時纔有效。

基於您的評論:

foreach(XmlNode image in stripImages) 
{ 
     DoSomething(image); 
} 
+0

我將需要所有4 ...一次一個.. – 2011-02-25 02:41:05

+0

請參閱編輯,只是迭代集合 – 2011-02-25 02:46:00

+0

有沒有一種方法來比較這樣的'if(id == 1){dosomething(image )}'???在你的foreach循環中 – 2011-02-25 03:21:45

0

如果你可以使用LINQ到XML,試試這個

 var xmlDoc = XDocument.Load(menuUrl); 
     var stripImages = xmlDoc.Descendants("StripImage").ToArray(); 
     var firstStringImage = stripImages[0]; 

     Console.WriteLine(stripImages [0]); 
     Console.WriteLine(stripImages [1]); 
     Console.WriteLine(stripImages [2]); 

編輯:

輸入

<Main> 
<Author> 
<StripImage>true</StripImage> 
</Author> 
<Author> 
<StripImage>false</StripImage> 
</Author> 
<Author> 
<StripImage>true</StripImage> 
</Author> 
<Author> 
<StripImage>true</StripImage> 
</Author> 
</Main> 

輸出

<StripImage>true</StripImage> 
<StripImage>false</StripImage> 
<StripImage>true</StripImage> 
+0

'System.Collections.Generic.IEnumerable '不包含'ToArray'的定義,也沒有擴展方法'ToArray'接受類型'System.Collections.Generic.IEnumerable '的第一個參數可以找到(你是否缺少使用指令或程序集引用?) – 2011-02-25 02:52:19

+1

@Abu你應該有'使用System.Xml.Linq;'和'使用System.Linq;'' – 2011-02-25 02:58:20

+0

oops ..我已經添加了這些命名空間,但我得到新的錯誤:'\t \t stripImages [1] \t Out of bounds數組索引\t System.Xml.Linq .XElement ' – 2011-02-25 03:10:38