我有一个从服务中收到的数据集。数据以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>
当然,我有大量的dataPoints。我还有一个列表(List),其中dataPoints的id显示在GUI中。我想要的是没有在GUI上显示的dataPoints,所以我只能操作那些而不是整个数据集。 感谢
答案 0 :(得分:2)
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();
答案 1 :(得分:0)
这是使用可变字典的一种方式,并为您提供点和相应节点的字典:
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>
。