【问题标题】:join all text from nodes xpath加入来自节点 xpath 的所有文本
【发布时间】:2014-03-26 02:51:16
【问题描述】:

您好,我有一些 html 文件:

<div class="text">
   <p></p>
   <p>text in p2</p>
   <p></p>
   <p>text in p4</p>
</div>

还有其他的:

<div class="text">    
   <p>text in p1</p>
   <p></p>
   <p>text in p3</p>
   <p></p>
</div>

我的查询是:(在 rapidminer 中)

//h:div[contains(@class,'inside')]/h:div[contains(@class,'text')]/h:p/node()/text()

但只返回第一个&lt;p&gt;

我的问题是如何将&lt;p&gt; 中的所有文本加入同一个字符串中?

谢谢

【问题讨论】:

    标签: xpath rapidminer


    【解决方案1】:

    我将把我的表达限制在你提供的 HTML sn-ps,所以我切断了前几个轴步骤。

    首先,此查询不应返回任何结果,因为段落节点没有任何子节点(但文本节点)。

    //h:div[contains(@class,'text')]/h:p/node()/text()
    

    要访问所有文本节点,您应该使用类似

    //h:div[contains(@class,'text')]/h:p/text()
    

    加入字符串很大程度上取决于您能够使用的 XPath 版本。如果 rapidminer 提供 XPath 2.0(它可能没有),你很幸运并且可以使用string-join(...),它将所有字符串连接到一个单独的:

    string-join(//h:div[contains(@class,'text')]/h:p/text())
    

    如果您被 XPath 1.0 所困,您无法做到这一点,只能针对固定数量的字符串,枚举所有字符串。出于可读性原因,我添加了换行符,如果您愿意,请删除它们:

    concat(
      //h:div[contains(@class,'text')]/h:p[1]/text(),
      //h:div[contains(@class,'text')]/h:p[2]/text(),
      //h:div[contains(@class,'text')]/h:p[3]/text(),
      //h:div[contains(@class,'text')]/h:p[4]/text()
    )
    

    【讨论】:

      猜你喜欢
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多