假设我有以下文档
<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);
prints:
<sets>
<setting>
<id>set1</id>
<value>80</value>
</setting>
<setting>
<id>set3</id>
<value>50</value>
</setting>
</sets>
如果您不需要转换后的 XML,而只是需要字典id -> value
映射,(存储value
as 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));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)