gpt4 book ai didi

c# - 在 .NET 中从 XML 文档中过滤元素的最简单方法

转载 作者:行者123 更新时间:2023-11-30 21:08:59 25 4
gpt4 key购买 nike

假设我有以下文档

<sets version="2.0">
<setting>
<id>set1</id>
<value>80</value>
<label>EVersion</label>
<type>Val</type>
<format>R</format>
<bits>
<addr>0</addr>
<startBit>0</startBit>
<bitWidth>8</bitWidth>
</bitspec>
</setting>
<setting>
<id>set3</id>
<value>50</value>
<label>GVersion</label>
<type>Bin</type>
<format>R</format>
<bits>
<addr>0</addr>
<startBit>0</startBit>
<bitWidth>8</bitWidth>
</bitspec>
</setting>
</sets>

我只想要 ID 和值元素 -

<sets version="2.0">
<setting>
<id>set1</id>
<value>80</value>
</setting>
<setting>
<id>set3</id>
<value>50</value>
</setting>
</sets>

如何使用 XDocument 和 LINQ 只选择这些?

最佳答案

使用linq-to-xml,代码如下:

var xml_str = @"<sets version=""2.0"">
<setting>
<id>set1</id>
<value>80</value>
<label>EVersion</label>
<type>Val</type>
<format>R</format>
<bits>
<addr>0</addr>
<startBit>0</startBit>
<bitWidth>8</bitWidth>
</bits>
</setting>
<setting>
<id>set3</id>
<value>50</value>
<label>GVersion</label>
<type>Bin</type>
<format>R</format>
<bits>
<addr>0</addr>
<startBit>0</startBit>
<bitWidth>8</bitWidth>
</bits>
</setting>
</sets>";

var doc = XDocument.Parse(xml_str);

var settings = new XElement("sets",
from setting in doc.Element("sets").Elements("setting")
select new XElement("setting", setting.Element("id"), setting.Element("value")));

Console.WriteLine(settings);

打印:

<sets>
<setting>
<id>set1</id>
<value>80</value>
</setting>
<setting>
<id>set3</id>
<value>50</value>
</setting>
</sets>

如果您不需要转换后的 XML,而只需要 id -> value 映射的字典,(将 value 存储为 int),你可以这样做:

var doc = XDocument.Parse(xml_str);
var settings_dict = doc.Element("sets").Elements("setting").ToDictionary(s => s.Element("id").Value, s => Convert.ToInt32(s.Element("value").Value));

关于c# - 在 .NET 中从 XML 文档中过滤元素的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9285708/

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