Linq:如何获取二级节点的值

时间:2011-09-08 23:33:56

标签: c# xml linq

我有一个看起来像

的xml
<response>
 <book>
   <title>Harry Potter</title>
   <Price>
        <Currency>USD</Currency>
        <Amount>$19.89</Amount>
   </Price>
</book>
</response>

获取title元素没有问题,但是当我试图获取价格内的所有值时,它不起作用。

var prices = from price in xmlDoc.Descendants("Price")
             select new
             {
                  currency = price.Element("currency").Value,
                  amount = price.Element("amount").Value,
             };

2 个答案:

答案 0 :(得分:4)

鉴于您的XML代码段,此代码可以填充一系列对象

var books = from book in document.Descendants("book")
            let title = book.Element("title").Value
            let price = book.Element("Price")
            let currency = price.Element("Currency").Value
            let amount = price.Element("Amount").Value
            select new
            {
                Title = title,
                Price = new
                {
                    Currency = currency,
                    Amount = amount
                }
            };

此结构遵循与XML建立的相同的层次结构。当然,如果你愿意的话,你可以把它压平成一个单层。

答案 1 :(得分:2)

我将货币的外壳和金额元素更改为标题大小写,并且工作正常。

var prices =
    from price in xmlDoc.Descendants("Price")
    select new
    {
        currency = price.Element("Currency").Value,
        amount = price.Element("Amount").Value,
    };

XML区分大小写。