如何正确执行Linq-to-XML查询

本文关键字:查询 Linq-to-XML 执行 何正确 | 更新日期: 2023-09-27 18:00:39

我有一个名为currentIndexXDocument,如下所示:

<INDEX>
   <SUBINDEX>
      <!-- Many tag and infos -->
   <SUBINDEX>
   <ITEM>
       <IDITEM>1</IDITEM>
   <ITEM>
   <ITEM>
       <IDITEM>2</IDITEM>
   <ITEM>
   ...
   <ITEM>
       <IDITEM>n</IDITEM>
   <ITEM>
</INDEX>

我会重新创建一个类似于上面的新XDocument

<INDEX>
   <SUBINDEX>
      <!-- Many tag and infos -->
   <SUBINDEX>
   <ITEM>
       <IDITEM>2</IDITEM>
   <ITEM>
</INDEX>

我想在C#中做到这一点,我已经尝试过以这种方式启动:

public void ParseItems(XDocument items)
{
    IEnumerable<XElement> items = from a in indexGenerale.Descendants(XName.Get("ITEM"))
                                  // where a.Element("IDITEM").Equals("2")
                                  select a;
    foreach(var item in items) {
        // do something
    }
}

现在的问题是:如果where子句被注释,items包含n元素(每个ITEM标记一个),但如果我删除了注释项,则该注释项为空。为什么会有这种行为。我需要如何执行搜索?

如何正确执行Linq-to-XML查询

使用显式强制转换:

from a in indexGenerale.Descendants("ITEM")
where (string)a.Element("IDITEM") == "2"

a.Element("IDITEM")将返回一个XElement,它永远不会等于"2"。也许你指的是a.Element("IDITEM").Value.Equals("2"),它也会起作用,但显式强制转换更安全。如果找不到元素,它不会抛出异常`,