string xmlFile = GetCountriesFile();
XDocument xd = XDocument.Load(xmlFile);
XElement city = xd.XPathSelectElement("/WorldCities/City");
Console.Clear();
// Print the name of the first city
Console.WriteLine(city.Element("Name").Value);
// Get all the cities in the document
// Works in http://xpath.online-toolz.com/tools/xpath-editor.php
// but returns null in .NET
var cities = xd.XPathSelectElements("/WorldCities/City");
// cities is set to nulll
Console.ReadKey();
我使用的XML文件不包含名称空间:
<?xml version="1.0" encoding="utf-8" ?> <!-- XML declaration, there can only be one XML declaration in an XML document -->
<WorldCities> <!-- Root node, there can only be one root node in an XML document -->
<City> <!-- Parent node -->
<Name>Vancouver</Name> <!-- Child node -->
<Country>Canada</Country> <!-- Sibling node of location -->
<Continent>North America</Continent> <!-- Sibling node of location -->
</City>
<City>
<Name>Buenos Aires</Name>
<Country>Argentina</Country>
<Continent>South America</Continent>
</City>
<City>
<Name>Berlin</Name>
<Country>Germany</Country>
<Continent>Europe</Continent>
</City>
<City>
<Name>Nairobi</Name>
<Country>Kenya</Country>
<Continent>Africa</Continent>
</City>
<City>
<Name>Tokyo</Name>
<Country>Japan</Country>
<Continent>Asia</Continent>
</City>
<City>
<Name>Sydney</Name>
<Country>Australia</Country>
<Continent>Australia</Continent>
</City>
</WorldCities>
当我使用XPATH路径“/ WorldCities / City”对抗相同的XML时,http://xpath.online-toolz.com/tools/xpath-editor.php处的XPATH测试器返回了所有City元素。那么为什么XPATHSelectElements方法返回null? XML文件中没有名称空间会导致问题。
答案 0 :(得分:0)
您的XPath是正确的,您的代码可以正常使用您提供的xml - 它会返回第一个查询的城市元素和第二个查询的6个城市的集合:
我的第一个想法是你正在加载一些其他文件。但是,因此您的第一个查询返回第一个城市元素,然后您的第二个查询应返回至少一个城市。看起来你没有使用相同的xpath进行第二次查询。确保您的真实代码与您提供的代码完全相同。
答案 1 :(得分:0)
该方法永远不会返回null,而是返回一个IEnumerable<XElement>
,您必须在代码中使用该{{1}}来访问集合中的元素(如果有任何选定的话)。但是你不会从该方法中获得null。