起初,我使用第一行,但奇怪的是,XPath无法正常工作。搜索Google并阅读StackOverflow帖子后,我发现它与名称空间有关。有答案,但是一个正在传递名称空间管理器或每个select方法的东西,这似乎使代码复杂化,另一个正在创建禁用名称空间的XmlTextReader(如第二行)。但是微软表示使用Create
而不是直接创建它。如何使用Create
(第一行)禁用名称空间?
//var r = XmlReader.Create(path); <-- Xpath does not work.
var r = new XmlTextReader(new FileStream(path, FileMode.Open)) { Namespaces = false }; //<-- Xpath works, but I am using XmlTextReader directly.
var doc = new XmlDocument();
while (r.Read())
{
if (r.NodeType == XmlNodeType.Element && r.Name == "item")
{
var str = r.ReadOuterXml();
doc.LoadXml(str);
var tn = doc.SelectSingleNode("//itemname");
}
}
我使用XmlReader和XmlDocument的组合,因为XML非常大,并且使用XmlDocument提取信息要容易得多。