我正在尝试获取以下文本
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元素,我在被包围的tr
s上循环(很容易做到这一点。
但我想排除文本[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]"/>