gpt4 book ai didi

c# - XPath 到 LINQ 的转换

转载 作者:太空狗 更新时间:2023-10-30 00:35:23 24 4
gpt4 key购买 nike

在 C# 中处理 XML 文件,我试图将 XPath 查询转换为 LINQ,但我不知道如何实现最后一部分:

XPath:

variable.XPathSelectElements("procedures/menu[@id='value']/procedure[@id]")

林克:

from el in variable.Descendants("procedures").Descendants("menu")
where el.Element("id").Value == "value"

如何实现/procedure[@id] 部分?

我已经修改了你的建议@Jon,但我似乎在这里犯了一个我无法解决的简单错误。

XDocument doc = XDocument.Load("procedures.xml");
var query = doc.Elements("procedures")
.Elements("menu")
.Where(x => (string) x.Attribute("id") == "value")
.Elements("procedure").Where(x => x.Attribute("id") != null);

public List<string> commands = new List<string>();
foreach (XElement procedure in query) {
commands.Add(procedure.Attribute("id"));
}

最佳答案

/procedure[@id] 选择所有具有“id”属性的“procedure”元素。但是,我认为您不应该在这种情况下使用 Descendants。我相信您的查询应该是:

 variable.Elements("procedures")
.Elements("menu")
.Where(x => (string) x.Attribute("id") == "value")
.Elements("procedure")
.Where(x => x.Attribute("id") != null);

编辑:有一种更简单的方法可以将命令 ID 放入列表中:

XDocument doc = XDocument.Load("procedures.xml");
var commands = doc.Elements("procedures")
.Elements("menu")
.Where(x => (string) x.Attribute("id") == "value")
.Elements("procedure")
.Where(x => x.Attribute("id") != null)
.Select(x => x.Attribute("id").Value)
.ToList();

关于c# - XPath 到 LINQ 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4912093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com