Получить атрибут родительского узла XML, если дочерний узел соответствует определенным критериям, и назначить оба параметра переменным - PullRequest
1 голос
/ 27 января 2011
<?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>

===========

То, что я хочу сделать, - это искать узлы, которые имеют «стоимость» со значением 500 или более, и, если это так, возьмите описание «элемента» и присвойте описание переменным x1 и стоимость y1 увеличение переменных).

Итак, конечный результат должен вернуться ..

x1 = 501 у1 = машина

x2 = 750 у2 = дом

Если возможно, я бы хотел сохранить это в C #, используя Xpath или аналогичный.

Ответы [ 2 ]

3 голосов
/ 27 января 2011

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 голос
/ 27 января 2011

Использование 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
               });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...