使用linq读取xml属性

时间:2015-12-14 15:27:15

标签: c# xml linq-to-xml

<ARTICLE_PRICE_DETAILS>
        <DATETIME type="valid_start_date">
          <DATE>2015-07-01</DATE>
        </DATETIME>
        <DATETIME type="valid_end_date">
          <DATE></DATE>
        </DATETIME>
</ARTICLE_PRICE_DETAILS>

我如何在元素中获得价值?

我试过这个

   var productQuery = (from p in xmlDocument.Descendants("ARTICLE_PRICE_DETAILS")
                        select new
                        {

                            articleDatetime = p.Element("DATETIME")
                                               .Attribute("valid_start_date")
                                               .Value

                        });

当我尝试使用articleDatetime时,我得到了一个例外。 需要帮助我

1 个答案:

答案 0 :(得分:3)

好吧,您似乎试图获得DATEDATETIME元素的值type="valid_start_date"

可以通过各种方式完成,其中之一是:

var dates = xmlDocument
     .XPathSelectElements("ARTICLE_PRICE_DETAILS/DATETIME[@type='valid_start_date']/DATE")
     .Select(e => e.Value)
     .ToList();

请注意,这里的大部分工作都是使用XPathSelectElements方法和适当的xpath表达式完成的。

在不使用xpath选择的情况下也可以实现相同的结果,只需要通过几个linq调用:

var xmlDocument = doc.Descendants("ARTICLE_PRICE_DETAILS")
                     .Descendants("DATETIME")
                     .Where(e => e.Attribute("type")?.Value == "valid_start_date")
                     .Descendants("DATE")
                     .Select(e => e.Value)
                     .ToList();

但它看起来不太可读(至少从我的角度来看)。