【问题标题】:retrieve xpath content from div id从 div id 检索 xpath 内容
【发布时间】:2012-02-15 07:43:07
【问题描述】:

如何检索 article-field1 中的文本?

<title>Testing</title>
  <link>http://example.org</link>
  <description>Description</description>
  <language>en-us</language>
  <lastBuildDate>Mon, 13 Feb 2012 00:00:00 +0000</lastBuildDate>

  <item>
    <title>Title Here</title>
    <link>http://example.org/2012/03/27/</link>
    <description><![CDATA[
        <div id="article-field1"><a href="http://example.org/test1">Test 1</a></div>
        <div id="article-field2">123</div>
    <pubDate>Tue, 2 Mar 2012 00:00:00 +0000</pubDate>
  </item>

我试过了

//description/div[@id="article-field1"]/text()

有什么建议吗?

谢谢

【问题讨论】:

  • 您发布了格式错误的 XML(&lt;![CDATA[ 没有相应的关闭标记),这可能与您尝试运行 XPath 的 XML 不同。如果这确实是您输入的 XML,那么难怪 XPath 不返回任何结果。此外,如果您的 divs 在 &lt;![CDATA[ 块内,则无法获取特定的 div,因为它们只是文本内容,而不是输入 XML 树的一部分。
  • 我看不到您的 CDATA 部分在哪里结束。应该有两个右括号。实际上,该示例缺少第二个描述的一些结束标记。它只是格式不正确。请更正。
  • @shadow:最好的建议是从文档中删除&lt;![CDATA[——然后您的 XPath 表达式可能会在新文档中选择想要的节点。

标签: html xpath


【解决方案1】:

据我所知,您的数据位于 CDATA 标记中。这会阻止解析其内容。

更多详情请见How do I retrieve element text inside CDATA markup via XPath?

【讨论】:

    【解决方案2】:
    //description/div[@id="article-field1"]/a/text() 
    

    如果删除了格式错误的CDATA 标签,则会添加一个根元素并关闭相应的“描述”标签。这假定部分粘贴原始 XML 的错误,这就是给定表达式的所有意义。基本上,原始查询缺少a 元素。

    这可以在http://www.xpathtester.com/ 进行验证。

    【讨论】:

      【解决方案3】:

      你不能只调用普通的 XPATH 处理器来做到这一点。

      你有两个选择:

      1. 使用实现dyn:evaluate() 函数的特定XPATH 处理器(这引出了一个问题:您使用的是什么处理器和版本?);或
      2. 使用两个调用。首先去获取 /title/item/description 节点的文本值。第二个,在将第一个结果作为新的 XML 文档加载后(用几个 tweek 将 xml 片段转换为适当的 xml 文档),是 div[@id="article-field1"] 。

      【讨论】:

      • 注意:title/item/description节点的内容是纯字符数据,不是XML,所以"//description/div[@id="article-field1"]/text( )" 不起作用。
      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 2012-01-23
      • 2016-05-15
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多