使用LINQ to XML返回子项

时间:2011-04-18 11:35:03

标签: c# xml linq linq-to-xml traversal

使用以下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,但也包含了消息节点本身。

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果可以有多个:

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

如果只能有一个:

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

答案 2 :(得分:0)

使用此:

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

因为你想拥有ArrayOfStock标签,所以你应该指定它......

答案 3 :(得分:0)

试试这个

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

答案 4 :(得分:0)

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