从两个节点提取XML值
本文关键字:节点 提取 XML 两个 | 更新日期: 2023-09-27 18:12:04
我想提取moduleId属性中的值和Field节点中的值。例如,在第一个节点中,我想从moduleId中提取447
,从Field节点中提取124694
。我将XML加载到一个XDocument中。最终结果将是一个Tuple,其中第一项是moduleId属性的值,第二项是Field节点的值。是否有一种方法,我可以做到这一点,使用一个XLinq语句?
作为奖励…我只想为guid ="07a188d3-3f8c-4832-8118-f3353cdd1b73"的节点执行此操作。这部分我可能会弄清楚如果有人能告诉我如何从两个节点提取信息,但额外的好处是在那里为我添加WHERE子句:)
<Records>
<Record moduleId="447">
<Field guid="07a188d3-3f8c-4832-8118-f3353cdd1b73">124694</Field>
</Record>
<Record moduleId="447">
<Field guid="07a188d3-3f8c-4832-8118-f3353cdd1b73">124699</Field>
</Record>
<Records>
我已经得到了到目前为止提取字段值使用这个…
IEnumerable<string> c = from p in sourceDocument.Descendants("Field")
where p.Attribute("guid").Value == "07a188d3-3f8c-4832-8118-f3353cdd1b73"
select p.Value;
但是我不知道如何从记录节点和字段节点获取信息。
试一试:
var doc = XDocument.Parse(xml);
var r = doc.Descendants("Record")
.Where(n => n.Element("Field").Attribute("guid").Value == "07a188d3-3f8c-4832-8118-f3353cdd1b73")
.Select(n => new { ModuleId = n.Attribute("moduleId").Value, Field = n.Element("Field").Value });
var a = r.ToArray();
下面是一个使用LINQ查询语法的解决方案:
XDocument document = XDocument.Parse(xml);
var query =
from el in document.Root.Elements("Record")
where (string)el.Element("Field").Attribute("guid") ==
"07a188d3-3f8c-4832-8118-f3353cdd1b73"
select new
{
ModuleId = (string)el.Attribute("moduleId"),
Field = (string)el.Element("Field")
};
foreach (var item in query)
{
Console.WriteLine
("ModuleId:[{0}]'nField:[{1}]'n--",
item.ModuleId,
item.Field);
}