LINQ 除了使用 XElement 的查询
本文关键字:XElement 查询 LINQ | 更新日期: 2023-09-27 18:33:37
我有一个从服务接收的数据集。数据采用 XML 格式。我们得到了一个包含所有数据的 XElement 对象。XML 文档的结构非常简单。看起来像这样:
<root>
<dataPoint>
<id>1</id>
<param1>somedata</param1>
<param2>somedata</param2>
</dataPoint>
<dataPoint>
<id>2</id>
<param1>somedata</param1>
<param2>somedata</param2>
</dataPoint>
</root>
当然,我有大量的数据点。我还有一个列表(列表),其中包含在GUI中显示的数据点的id。我想要的是 GUI 上未显示的数据点,因此我只能操作这些数据点,而不是整个数据集。谢谢
var toDisplay = new List<string>() { "2" };
var xDoc = XElement.Load(.....);
var dPoints = xDoc.Descendants("dataPoint")
.Where(d => !toDisplay.Contains(d.Element("id").Value));
var newXml = new XElement("root",dPoints).ToString();
以下是使用可变字典并为您提供点和相应节点的字典的一种方法:
var xml = "<root> 'r'n <dataPoint>'r'n <id>1</id>'r'n <param1>somedata</param1>'r'n <param2>so" +
"medata</param2>'r'n </dataPoint>'r'n <dataPoint>'r'n <id>2</id>'r'n <param1>somedata" +
"</param1>'r'n <param2>somedata</param2>'r'n </dataPoint>'r'n</root>";
var doc = XElement.Parse(xml);
var pointsInGui = new List<int> {1, 3, 5};
var dict = doc.Descendants("dataPoint").ToDictionary(e => Convert.ToInt32(e.Element("id").Value));
foreach (var point in pointsInGui) dict.Remove(point);
此时dict
包含2 => <relevant element>
.