如果子节点满足特定条件并将两者都分配给变量,则检索XML父节点属性

时间:2011-01-27 04:49:26

标签: c# xml xpath

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<top>
   <item description="book">
      <cost>250</cost> 
   </item>
   <item description="car">
      <cost>501</cost> 
   </item>
   <item description="house">
      <cost>700</cost> 
   </item>
</top>

===========

我想要做的是搜索“cost”值为500或更高的节点,如果是这种情况,请抓住“item”描述并将描述分配给变量x1,将成本分配给y1(递增变量)。

因此,最终结果应该返回..

x1 = 501 y1 =汽车

x2 = 750 y2 =房子

如果可能,我想使用Xpath或类似方法在C#中维护它。

2 个答案:

答案 0 :(得分:3)

LINQ to XML救援!

XDocument doc = XDocument.Load(@"test.xml");
var items = doc.Descendants("cost")
               .Where(c => Convert.ToInt32(c.Value) >= 500)
               .Select(c => new { x = c.Value, y = c.Parent.Attribute("description").Value })
               .ToList();

答案 1 :(得分:1)

使用LINQ to XML:

XDocument doc = ...;
var query = from e in doc.Descendants("item")
            let cost = Convert.ToInt32(e.Value)
            where cost >= 500
            select new 
            {
                x = cost,
                y = e.Attribute("description").Value
            };

或者与XPath结合使用:

XDocument doc = ...;
var query = doc.XPathSelectElements("/*/item[cost >= 500]")
               .Select(e => new
               {
                   x = Convert.ToInt32(e.Value),
                   y = e.Attribute("description").Value
               });