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 上未显示的数据点,因此我只能操作这些数据点,而不是整个数据集。谢谢

LINQ 除了使用 XElement 的查询

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> .