使用Xpath

时间:2016-02-07 17:02:02

标签: android xml xpath

我正在尝试从XML中获取iframe src,以便在 WebView 中显示它。为此,我使用XPath获取值。目前我正在尝试解析this iframe。但我根本没有任何价值。

我试过这个 XPath

"//GoodreadsResponse/book/reviews_widget/iframe[@id=\"the_iframe\"]/@src/text()"

我的XPath是否错误获取此iframe src?完整的xml是here

1 个答案:

答案 0 :(得分:1)

也许另一个答案会纠正我,但我认为XPath不会解析CDATA部分内的数据。

但是,您可以分两步完成此操作。

  1. 抓取//GoodreadsResponse/book/reviews_widget
  2. 的文字部分
  3. 这是之前的CDATA部分。它不是XML(多个根元素),但我们可以添加一个父元素,然后解析它。
  4. 我将包含一个.NET代码段,希望您可以转换。

        XmlNode node = document.SelectSingleNode("//GoodreadsResponse/book/reviews_widget");
        String cdataText = node.InnerText;
    
        // The cdataText here isn't quite XML, as it has multiple roots.
        // let's surround it by a single root element
        String xml = "<root>" + cdataText + "</root>";
    
        XmlDocument innerDoc = new XmlDocument();
        innerDoc.LoadXml(xml);
    
        XmlNode srcAttr = innerDoc.SelectSingleNode("/root/div/iframe[@id=\"the_iframe\"]/@src");
    
        // This prints out https://www.goodreads.com/api/reviews_widget_iframe?did=DEVELOPER_ID&format=html&isbn=0307277674&links=660&min_rating=&review_back=fff&stars=000&text=000
        Console.WriteLine(srcAttr.Value);