首页 > 解决方案 > 第一个单词的 XPath?

问题描述

对于此 HTML / XML:

<div class="contentBlock">
  <h2> </h2>
  <h1></h1>
  <h1>DBS055 - single  module packages</h1>
</div>

我只想用 XPath 提取DBS055,而不是整个文本。

标签: htmlxmlxpathnsindexpathdomxpath

解决方案


XPath 2.0

//h1[normalize-space()]/replace(normalize-space(),'^([\w\-]+).*', '$1')

h1将返回那些在其字符串值中具有非空格字符的元素的字符串值的所有第一个单词。

XPath 1.0

substring-before(
  concat(
    normalize-space(
      translate(//h1[normalize-space()][1], ',;/.', ' ')), ' '), ' ')

近似于更健壮的 XPath 2.0 解决方案。根据需要扩展',;/.'您考虑定义单词边界的各种字符。

解释:

  1. 选择第一个h1具有非纯空格字符串值的。
  2. 将所有单词边界字符映射到空格。
  3. 附加一个空格来覆盖单个单词的大小写。
  4. 标准化间距。
  5. 返回第一个空格之前的子字符串。

推荐阅读