【问题标题】:XML parsing with XPath. C#使用 XPath 进行 XML 解析。 C#
【发布时间】:2012-06-21 15:48:55
【问题描述】:

我有一些问题,也许是愚蠢的问题。

我有这个网址: http://flibusta.net/opds/opensearch?searchTerm=Тол&searchType=books

我想像这样解析响应:

string search_link = "http://flibusta.net/opds/opensearch?searchTerm=Тол&searchType=books";

_document = new XPathDocument(search_link);

XPathNavigator navigator = _document.CreateNavigator();
XmlNamespaceManager ns = new XmlNamespaceManager(navigator.NameTable);
XPathNodeIterator nodes = navigator.Select("/feed/title");

while (nodes.MoveNext())
{
        XPathNavigator currentNavigator = nodes.Current;
        string title = currentNavigator.Value;
        Trace.WriteLine(title);
}

但节点返回零结果。无法理解我做错了什么。

谢谢,

帕维尔。

【问题讨论】:

  • 是命名空间中的那些节点,如果是这样,您需要在选择参数中指定它,例如navigator.Select("/myns:feed/myns:title");
  • 您的链接似乎不起作用,而且很可能,只要堆栈溢出时存在此问题,它就不会继续起作用,所以,也许您可​​以只显示一个您希望在实际问题中解析的 XML 的小示例,这将很有帮助。
  • 1) 不,不在任何命名空间中。
  • 2) 抱歉,但链接效果很好。但是需要很长时间才能加载(可能是坏服务器:)。谢谢。

标签: c# .net xml xpath


【解决方案1】:

忘记没有名称空间的 XML。试试下面的例子,它对我来说很好:

var document = new XPathDocument("http://flibusta.net/opds/opensearch?searchTerm=%D0%A2%D0%BE%D0%BB&searchType=books");
XPathNavigator navigator = document.CreateNavigator();
var ns = new XmlNamespaceManager(navigator.NameTable);
ns.AddNamespace("atom", "http://www.w3.org/2005/Atom");

XPathNodeIterator nodes = navigator.Select("/atom:feed/atom:title", ns);

while (nodes.MoveNext())
{
        XPathNavigator currentNavigator = nodes.Current;
        string title = currentNavigator.Value;
        Trace.WriteLine(title);
}

【讨论】:

  • 看起来 OP 没有声明他的命名空间或将 NamespaceManager 传递给 Select(...)
猜你喜欢
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
相关资源
最近更新 更多