2012-03-28 48 views
0

一個項目,我有像下面找到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> 

我怎麼能找到特殊的月份和日期事件xml文件? 例如我想獲得「樣品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(); 
+1

使用LINQ XML和的XDocument。 – 2012-03-28 14:06:07

回答

2

您需要修改您的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; 
2

一個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' 作爲字符串爲簡單起見)

+0

+1甜蜜的解決方案 – GETah 2012-03-28 14:16:16