如何正确执行Linq-to-XML查询
本文关键字:查询 Linq-to-XML 执行 何正确 | 更新日期: 2023-09-27 18:00:39
我有一个名为currentIndex
的XDocument
,如下所示:
<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
标记一个),但如果我删除了注释项,则该注释项为空。为什么会有这种行为。我需要如何执行搜索?
使用显式强制转换:
from a in indexGenerale.Descendants("ITEM")
where (string)a.Element("IDITEM") == "2"
a.Element("IDITEM")
将返回一个XElement
,它永远不会等于"2"
。也许你指的是a.Element("IDITEM").Value.Equals("2")
,它也会起作用,但显式强制转换更安全。如果找不到元素,它不会抛出异常`,