首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XPathNavigator帮助

XPathNavigator帮助
EN

Stack Overflow用户
提问于 2010-11-15 04:07:24
回答 1查看 2.7K关注 0票数 3

下面是我正在使用的XML示例(可从任何wiki的Special:Export/SomePage results中检索):

代码语言:javascript
复制
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.4/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.4/ http://www.mediawiki.org/xml/export-0.4.xsd" version="0.4" xml:lang="en"> 
  <siteinfo> 
    <sitename>Wikipedia</sitename> 
    <base>http://en.wikipedia.org/wiki/Main_Page</base> 
    <generator>MediaWiki 1.16wmf4</generator> 
    <case>first-letter</case> 
    <namespaces> 
      <namespace key="-2" case="first-letter">Media</namespace> 
      <namespace key="-1" case="first-letter">Special</namespace> 
      <namespace key="0" case="first-letter" /> 
      ...
    </namespaces> 
  </siteinfo> 
</mediawiki> 

我已经尝试了我能想到的所有方法,直接“跳”到siteinfo节点并迭代结果,除非我从根到下手动导航每个子节点,否则什么都不会起作用。我已经尝试了各种.Move*和.Select*方法的一百万种变体,看起来我只是在碰壁,但我目前的变体看起来是这样的:

代码语言:javascript
复制
StringReader strr = new StringReader(_rawData);
XPathDocument xd = new XPathDocument(XmlReader.Create(strr, Bot.XmlReaderSettings));
XPathNavigator xn = xd.CreateNavigator();
XPathNodeIterator xni = xn.Select("/mediawiki/siteinfo");
foreach (XPathNavigator nav in xni)
    Console.WriteLine(nav.LocalName);

这不会返回任何结果。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-15 04:26:22

欢迎使用XML命名空间。您需要在前缀和根元素的xmlns之间创建一个映射。例如,下面的代码适用于我:

代码语言:javascript
复制
using (var r = File.OpenText("test.xml")) {
    XPathDocument xd = new XPathDocument(XmlReader.Create(r));
    XPathNavigator xn = xd.CreateNavigator();

    XmlNamespaceManager nsmgr = new XmlNamespaceManager(xn.NameTable);
    nsmgr.AddNamespace("mw", "http://www.mediawiki.org/xml/export-0.4/");

    XPathNodeIterator xni = xn.Select("/mw:mediawiki/mw:siteinfo", nsmgr);

    foreach (XPathNavigator nav in xni)
        Console.WriteLine(nav.Name);
}

如果你感兴趣,请进一步阅读:MSDN: XML Namespaces and How They Affect XPath and XSLT

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4179420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档