使用 linq 读取 xml 属性

Read xml attribute with linq

<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 时,出现异常。 需要帮助

嗯,看起来您正在尝试获取 DATETIME 下具有属性 type="valid_start_date".

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();

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