найти элемент в XML-файле - PullRequest
0 голосов
/ 28 марта 2012

У меня есть XML-файл, как показано ниже

<root>
 <Month name="Jan"  index="1">
      <Day index="2">
         <event> sample 1</event>
      </Day>
       <Day index="3">
         <event> sample 2 </event>
      </Day>
  </Month>

<Month name="Feb"  index="2">
      <Day index="5">
         <event> sample 3 </event>
      </Day>
       <Day index="2">
         <event> sample 4 </event>
      </Day>
  </Month>
</root>

Как мне найти специальное событие месяца и дня?например, я хочу получить «образец 2», когда месяц равен 1, а день равен 2

XmlDocument doc = new XmlDocument();
doc.Load("EventsXML.xml");
XmlNode even= doc.SelectSingleNode("/root/Month[@index='1'] |/root/Month/day[@index='2']");
string str=even.InnerXml.ToString();

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Ответ XDocument (Linq-to-XML):

var doc = XDocument.Load(...);
var day = doc.Root
    .Descendants("Month")
    .Where(e => e.Attributes("index").Value == m)
    .Descendants("Day")
    .Where(e => e.Attributes("index").Value == d);

(для простоты 'm' и 'd')

2 голосов
/ 28 марта 2012

Вам нужно изменить ваш xpath примерно так:

XmlNode even= doc.SelectSingleNode("/root/Month[@index='1']/Day[@index='2']/event");

Вы также можете использовать InnerText, а не InnerXml, поскольку вы знаете, что содержимое является текстом, или , вы можете изменить xPath, чтобы учесть это:

XmlNode even = doc.SelectSingleNode("/root/Month[@index='1']/Day[@index='2']/event/text()");
string str = even.Value;
...