C#和XPath - 如何查询

Aag*_*nor 3 c# xpath

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

<mediawiki ...>
  <siteinfo>...</siteinfo>
  <page>
    <title>The Title</title>
    <id>42</id>
    ...
  </page>
  ... more page items ...
</mediawiki>
Run Code Online (Sandbox Code Playgroud)

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

_xmlArticlesDocument = new XmlDocument();
_xmlArticlesDocument.Load(xmlArticlesFileName);
Run Code Online (Sandbox Code Playgroud)

现在我想抓住一个具有给定id-Subelement的页面元素.所以我写道:

XmlNode node = _xmlArticlesDocument.DocumentElement.SelectSingleNode
               ("//mediawiki/page[id=" + id.ToString() + "]");
Run Code Online (Sandbox Code Playgroud)

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

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

先谢谢你,弗兰克

Ant*_*nes 5

查询看起来正是基于您向我们展示的内容.但是我怀疑在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);
Run Code Online (Sandbox Code Playgroud)