2012-03-28 12 views
0

i wie eine XML-Datei hat unterein Element in XML-Datei findet

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

wie kann ich spezielle Monat und Tag Veranstaltung finden? zum Beispiel möchte ich „Probe 2“ bekommen, wenn Monat 1 und Tag ist 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(); 
+1

Verwenden LINQ to XML und XDocument. –

Antwort

2

Sie benötigen eine XPath, so etwas ändern:

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

Sie können auch eher nutzen Innertext als InnerXml, wie Sie wissen, dass der Inhalt Text ist, oder Sie die xPath ändern kann dies zu berücksichtigen:

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

Ein XDocument (Linq -zu-XML) Antwort:

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' und 'd' als String der Einfachheit halber)

+0

+1 Süße Lösung – GETah