问题描述
|
我有以下格式的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 Weather时,它看起来就像Google WeatherYes。有人可以告诉我我的XPath怎么了(在这里):
InitializeDropDown(\"SupportedWeatherServices.xml\",\"descendant::Service[name]\");
解决方法
XPath应该是
//Service/name
var serviceList = rootNode.SelectNodes(\"//Service/name\");
或descendant::Service/name
(如果您更喜欢此语法)。