如果XSLT中的for-each循环中有某个子节点,则获取文本但排除该节点



我正在尝试获取以下文本

Divided into:
Bonaire, Sint Eustatius and Saba (BQ, BES, 535)
Curaçao (CW, CUW, 531)
Sint Maarten (Dutch part) (SX, SXM, 534)

来源(摘录(:

<td>
  Divided into:<br />
  <a href="/wiki/Caribbean_Netherlands" title="Caribbean Netherlands">Bonaire, Sint Eustatius and Saba</a> (<tt>BQ</tt>, <tt>BES</tt>, <tt>535</tt>) <sup id="cite_ref-7" class="reference">
    <a href="#cite_note-7">
      <span>[</span>note 4<span>]</span>
    </a>
  </sup><br />
  <a href="/wiki/Cura%C3%A7ao" title="Curaçao">Curaçao</a> (<tt>CW</tt>, <tt>CUW</tt>, <tt>531</tt>)<br />
  <a href="/wiki/Sint_Maarten" title="Sint Maarten">Sint Maarten (Dutch part)</a> (<tt>SX</tt>, <tt>SXM</tt>, <tt>534</tt>)
</td>

使用<xsl:value select="td[4]"/>(它是第4个td元素,我在被包围的trs上循环(很容易做到这一点。

但我想排除文本[note 4],因此每个具有span子级的a

我试过td[4]/node()[not(descendant::span)],但只剩下Divided into:td[4][not(//span)]总是给出空字符串。

当您匹配td[4]/node()[not(descendant::span)]时,您正在匹配没有span后代的第四个td。由于您的td[4]确实有一个span子代,因此您得到的结果为空。

您需要的是一个模板来匹配进行文本输出的td[4]子节点:

<xsl:template match="td[4]/node()"> ... <xsl:template>  <!-- match descendant nodes of td[4] -->

以及另一个专门捕捉跨度节点的模板:

    <xsl:template match="span | text()[preceding-sibling::span] | text()[following-sibling::span]"/>

相关内容

  • 没有找到相关文章

最新更新