LINQ除了使用XElement查询

时间:2012-05-07 21:13:38

标签: c# asp.net

我有一个从服务中收到的数据集。数据以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,所以我只能操作那些而不是整个数据集。 感谢

2 个答案:

答案 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>