我想从td中仅提取文本的一部分,例如"FLAC".如何使用XPath完成?
我试过// text()[contains(.,'FLAC')],但是它返回了整个文本.
<tr>
<td class="left">Format plików</td>
<td>
AVI, FLV, RM, RMVB, FLAC, APE, AAC, MP3, WMA, OGG, BMP, GIF, TXT, JPEG, MOV, MKV, DAT, DivX, XviD, MP4, VOB
</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
您必须首先指定树中的位置,并且由于您有多个<td>
元素,因此首先要查找包含文本的节点.
substring(//tr/td[contains(@class, 'left')]/following-sibling::text()[1], startIndex, length)
Run Code Online (Sandbox Code Playgroud)
要么
substring(//tr/td[@class='left']/following-sibling::text()[1], startIndex, length)
Run Code Online (Sandbox Code Playgroud)
根据评论更新:
T/F包含(// tr/td [@ class ='left']/follow-sibling :: text()[1],'FLAC')
这将为您提供兄弟元素的T/F,之后会出现"FLAC"字样.您可以使用substring()来获取该字符串的子集,但这只是在静态情况下.我建议使用不同的方法,如XSLT来改变/分离字符串.希望这可以帮助!
更新2
substring('FLAC',1,4*contains(//tr/td[@class='left']/following-sibling::text()[1], 'FLAC'))
Run Code Online (Sandbox Code Playgroud)
如果FLAC出现在您正在检查的节点中,这将返回FLAC,如果不是,则返回空白....
逐步细分:
//tr/td[@class='left']
- 返回属性"class"设置为"left"的所有 <td>
节点
/following-sibling::text()
- 这将返回上述节点之后的所有节点文本.
添加[1]将返回上面列表中的第一个节点.
包裹在此包含(aboveValue,"FLAC")将返回TRUE(或图1,在本实施例中),如果"FLAC"存在于文本,和假(0),如果它不是.
将所有这些包含在子字符串('FLAC',1,4*aboveValue)中相当于XPath 1.0中的If/Then/Else,因为没有内置函数可以这样做:如果'FLAC'是当前,拉子串1,4*(true = 1)= 4,这是整个字符串.如果'FLAC'不存在,则拉出子串1,4*(false = 0)= 0,这不是字符串.
另外需要注意的是,contains()区分大小写,所以如果这个字段可以有"flac",它将返回false.要检查FLAC的所有案例混合,请使用translate(),此处示例.
归档时间: |
|
查看次数: |
7656 次 |
最近记录: |