使用LINQ to XML返回儿童

问题描述:

使用以下XML。使用LINQ to XML返回儿童

<?xml version="1.0"?> 
<Message> 
     <ArrayOfStock xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
      <Stock> 
        <StockID>9cddb639-25ee-4415-be07-3109e5ae9883</StockID> 
        <Description>Stock Item 0</Description> 
      </Stock> 
      <Stock> 
        <StockID>f89f02f9-b359-48c8-8d2f-3a950837f4fb</StockID> 
        <Description>Stock Item 1</Description> 
      </Stock> 
      <Stock> 
        <StockID>3338ec80-f59e-4979-a04c-f7d52e386bb7</StockID> 
        <Description>Stock Item 2</Description> 
      </Stock> 
     </ArrayOfStock> 
</Message> 

有人请告诉我如何返回ArrayOfStock XML吗?

我用

using (MemoryStream memStream = new MemoryStream(this.Message)) 
{ 
    XDocument doc = XDocument.Load(memStream); 
    var message = from arrayOfStock in doc.Elements("Message") 
        select arrayOfStock; 
}  

而且似乎返回ArrayOfStock而且还包括信息节点本身。

使用此:

var arrayOfStockNodes = from arrayOfStock 
         in doc.Root.Elements("ArrayOfStock") 
         select arrayOfStock; 

因为你想拥有ArrayOfStock标记,你应该指定它...

+0

该查询表达式实际上是一个无操作。 – 2011-04-18 11:42:32

+0

@Martinho:我不能跟着你,请解释一下。它返回指定的节点... – 2011-04-18 11:43:29

+1

'doc.Root.Elements(“ArrayOfStock”)'本身已经返回所需的XElements序列。 'from ... select ...'语法没有做其他任何事情。 – 2011-04-18 11:45:08

我相信this question的答案可能对您有所帮助。

如果可以有多个:

IEnumerable<XElement> arraysOfStock = doc.Root.Elements("ArrayOfStock"); 

如果只能有一个:

XElement arrayOfStock = doc.Root.Element("ArrayOfStock"); 

试试这个

var result = from c in XDocument.Load("PATH_OF_XML_FILE").Descendants("ArrayOfStock") 
          select c; 

doc.Descendants("ArrayOfStock").Concat(new[] { doc.Root });