2

我有一个从服务接收的数据集。数据采用 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>

当然,我有大量的数据点。我还有一个列表(列表),其中数据点的 id 显示在 GUI 中。我想要的是未显示在 GUI 上的数据点,因此我只能操作这些数据点,而不是整个数据集。谢谢

4

2 回答 2

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();
于 2012-05-07T21:59:40.627 回答
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>.

于 2012-05-07T21:47:38.677 回答