XPath не работает должным образом - PullRequest
3 голосов
/ 10 июня 2011

У меня есть XML-документ в этом формате:

<?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 , когда все, что я хочу, это Google Weather . Может кто-нибудь сказать мне, что не так с моим XPath (который здесь):

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

1 Ответ

4 голосов
/ 10 июня 2011

XPath должен быть //Service/name

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

или descendant::Service/name, если вам больше нравится этот синтаксис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...