2011-06-10 133 views
3

我有這種格式的XML文檔:的XPath工作不正常

<?xml version="1.0" encoding="utf-8" ?> 
<SupportedServices> 
    <Service> 
    <name>Google Weather</name> 
    <active>Yes</active> 
    </Service> 
    ... 
</SupportedServices> 

而且我試圖解析像這樣的XML文件:

public void InitializeDropDown(string XmlFile, string xpath) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(XmlFile); 

    var rootNode = doc.DocumentElement; 

    var serviceList = rootNode.SelectNodes(xpath); 

    Parallel.ForEach(serviceList.Cast<XmlNode>(), service => 
    { 
     if (Properties.Settings.Default.ServiceActive && 
      Properties.Settings.Default.ServiceName == service.InnerText) 
     { 
      WeatherServicesCBO.Items.Add(service.InnerText); 
     } 
    }); 
} 

這個問題我有是兩個值(名稱&有效)被選中,所以它看起來像Google WeatherYes,當我想要的所有是谷歌天氣。誰能告訴我有什麼不對我的XPath(這是這裏):

InitializeDropDown("SupportedWeatherServices.xml", "descendant::Service[name]"); 

回答

4

的XPath是//Service/name

var serviceList = rootNode.SelectNodes("//Service/name"); 

descendant::Service/name,如果你喜歡這個語法的更多。

+0

感謝您的提示,它的作品美麗。技術上,我的原始xpath有什麼問題? – PsychoCoder 2011-06-10 05:14:10

+3

'服務[名稱]'選擇一個服務,只要它有一個名字孩子。 '服務/名稱'選擇姓名的孩子。 – 2011-06-10 09:30:20