gpt4 book ai didi

c# - 在一条语句中从 Xml 文档中选择多个值

转载 作者:数据小太阳 更新时间:2023-10-29 02:57:12 26 4
gpt4 key购买 nike

我正在尝试使用

同时从两个相邻的 xml 节点中选择值
var values =
xDoc.Element("root")
.Elements("model")
.Where(x => x.Element("modelName").Value == modelType.ToString())
.Elements("directory")
.Select(x => new { x.Element("directoryName").Value,
x.Element("taskName").Value });

我在 .Value 下看到红色波浪线,表示“重复的匿名类型属性名称‘Value’。这是 xml

    <root>
<model>
<modelName>Model1</modelName>
<directory>
<directoryName>Dir1</directoryName>
<taskName>Task1</taskName>
</directory>
</model>
<model>
<modelName>Model2</modelName>
<directory>
<directoryName>FirstValue</directoryName>
<taskName>SecondValue</taskName>
</directory>
</model>
</root>

我想提取 Dir1 和 Task1 或 FirstValue 和 SecondValue。

最佳答案

我建议您使用将元素转换为字符串而不是访问它们的 Value 属性。因为如果缺少元素(例如,对于 Model1,您没有 taskName 元素),那么您将得到 NullReferenceException

var values = from m in xDoc.Root.Elements("model")
where (string)m.Element("modelName") == modelType.ToString()
let d = m.Element("directory")
select new {
Directory = (string)d.Element("directoryName"),
Task = (string)d.Element("taskName")
};

我还发现声明式(查询)语法比 lambda 语法更具可读性(个人喜好)。您还可以使用 XPath 使查询更加紧凑:

string xpath = String.Format("root/model[modelName='{0}']/directory", modelType);
var values = from d in xdoc.XPathSelectElements(xpath)
select new {
Directory = (string)d.Element("directoryName"),
Task = (string)d.Element("taskName")
};

关于c# - 在一条语句中从 Xml 文档中选择多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21294352/

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