gpt4 book ai didi

c# - XPathNavigator 帮助

转载 作者:数据小太阳 更新时间:2023-10-29 02:18:11 26 4
gpt4 key购买 nike

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

<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* 方法的一百万种变体,看起来我只是在用头撞墙,但我当前的变体看起来像这样:

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);

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

最佳答案

欢迎使用 XML namespace 。您需要在前缀和根元素的 xmlns 之间创建映射。例如,这段代码对我有用:

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 .

关于c# - XPathNavigator 帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com