我有一堆HTML文本流,每个都包含短语" Toy:"一次。
如,
<p><b>Toy: </b><b>Train</b></p>
<p><b>Toy:</b><b>Chess game</b></p>
<p><b>Toy: </b><span>Guitar</span></p>
<p><b>Toy: </b>Doll</p>
<p><strong><ul>Toy: </ul></strong></b><b>Monkey costume</b></p>
<p><b>Toy: Train</b></p>
<p>Toy: Skipping rope</p>
<p>Toy:Snail</p>
我想从中删除这些文字。
例如,
Toy: Train
Toy:Chess game
Toy: Guitar
Toy: Doll
Toy: Monkey costume
Toy: Train
Toy: Skipping rope
Toy:Snail
我无法找到一个我认为应该可行的单个xpath表达式。
示例:
//p[starts-with(descendant-or-self::*/text(), "%s")]
答案 0 :(得分:2)
首先,XPath需要格式良好的XML:
<root>
<p><b>Toy: </b><b>Train</b></p>
<p><b>Toy:</b><b>Chess game</b></p>
<p><b>Toy: </b><span>Guitar</span></p>
<p><b>Toy: </b>Doll</p>
<p><strong><ul>Toy: </ul></strong><b>Monkey costume</b></p>
<p><b>Toy: Train</b></p>
<p>Toy: Skipping rope</p>
<p>Toy:Snail</p>
</root>
然后,您可以选择以p
开头的所有Toy:
元素:
//p[starts-with(., 'Toy:')]
我想从这些文本中删除文本。
在纯 XPath 1.0 中,您可以执行
//p[starts-with(., 'Toy:')]//text()
检索以p
开头的Toy:
元素下的文本节点,但每个文本节点字符串将在其自己的行上,而不是按封闭p
分组。
要将文本分组在每个封闭的p
下,您可以单步执行选定的p
元素,并使用您用于评估XPath的任何托管语言获取每个元素的字符串值,或者您可以使用 XPath 2.0 :
//p[starts-with(., 'Toy:')]/string()
将返回
Toy: Train
Toy:Chess game
Toy: Guitar
Toy: Doll
Toy: Train
Toy: Skipping rope
Toy:Snail