我有一份XML文档。
<checksum>
<kbbest>
<delimiter value="length" offset="0">2</delimiter>
<record name="header">
<identificators>
<identificator value="char('2')" offset="0">HO</identificator>
<identificator value="char('2')" offset="0">HE</identificator>
</identificators>
<fields>
<!-- some fields -->
</fields>
</record>
<record name="footer">
<identificators>
<identificator value="char('2')" offset="0">TO</identificator>
<identificator value="char('2')" offset="0">TF</identificator>
</identificators>
<fields>
<!-- some fields -->
</fields>
</record>
</kbbest>
</checksum>
我想根据识别器选择存储在记录中的所有信息。 我的剧本:
string recordType = "HE"
IEnumerable<XElement> rec = null;
rec = from xr in doc.Element(fileType).Elements("record")
where (string)xr.Element("identificators").Element("identificator") == recordType
select xr;
错误:此选择只能查找具有标识符HO或TO的记录。
如果我尝试将其写为列表
string recordType = "HE"
IEnumerable<XElement> rec = null;
rec = from xr in doc.Element(fileType).Elements("record")
where xr.Element("identificators").Elements("identificator").Cast<String>().Contains(recordType)
select xr;
错误:无法将XElement强制转换为String
答案 0 :(得分:0)
我相信这就是你想要的
string recordType = "HE"
IEnumerable<XElement> rec = null;
rec = from xr in doc.Element(fileType).Descendants ("record")
where xr.Element("identificators")
.Elements("identificator")
.Any(x => x.Value == recordType)
select xr;
您需要使用Descendants
来获取任何超过一个级别的元素。然后,您必须将Value
的{{1}}与字符串值进行比较。