C#和XPath – 如何查询

我有一个XML文件,它具有以下结构:

 ...  The Title 42 ...  ... more page items ...  

我稍微了解一下XPath-Query并编写了以下代码:

 _xmlArticlesDocument = new XmlDocument(); _xmlArticlesDocument.Load(xmlArticlesFileName); 

现在我想抓住具有给定id-Subelement的页面Element。 所以我写道:

 XmlNode node = _xmlArticlesDocument.DocumentElement.SelectSingleNode ("//mediawiki/page[id=" + id.ToString() + "]"); 

但节点始终为空。 我尝试了几个查询,包括“page / id”,“page”,“/ page”,“// page”来获取任何内容 ,但node始终为null。 我通过快速检查检查了_xmlArticlesDocument变量,它包含具有预期结构的正确XML文件。

在我看来,我错过了一些非常基本的东西,但不知道是什么。 也许这里有人有想法?

谢谢,弗兰克

根据您向我们展示的内容,该查询看起来正确。 但是我怀疑在mediawiki元素上有“…”有一个xmlns =“….”属性对吗?

我怀疑那将是绊倒你的东西。 你需要这样的代码: –

  XmlNamespaceManager nsmgr = new XmlNamespaceManager(_xmlArticlesDocument.NameTable); nsmgr.AddNamespace("a", "the-namespace-in-them-xmlns-attribute"); XmlNode page = _xmlArticlesDocument.SelectSingleNode(String.Format("//a:page[id={0}]", id), nsmgr); 

你有没有尝试过:

 _xmlArticlesDocument.DocumentElement.SelectSingleNode ("page[id='" + id.ToString() + "']"); // Note the single quotes 

此外,如果任何XML节点位于不是默认名称空间的名称空间中(即 ),那么您还需要一个XmlNamespaceManager

查看Linq to XML。 我也是一个XML noob,我发现它更容易,XMLDocument。