我在这里有一些例子:
<p>
<font>Mortal Combat: A very good gamenbsp;</font>
</p>
<p>
<font>Call of Duty: Don't buy this game.</font>
</p>
<p>
<font>Street Fighter 2: Not the best game, but it's OK!</font>
</p>
到目前为止,我来了:
/p/font[text()="Mortal Combat" or text()="Street Fighter 2"]
我想只在匹配时提取,但我不希望在冒号:
在此示例中,我希望的输出是:
Mortal Kombat
Street Fighter
我曾尝试使用previous-sibling做某事,但它没有用。
答案 0 :(得分:3)
您可以在XPath 1.0中使用substring-before()
这会对你有用吗?
//p/font[substring-before(., ":")="Mortal Combat" or substring-before(., ":")="Street Fighter 2"]/text()
这不会输出子字符串,只是匹配具有其中一个子字符串的文本节点。
在表达式周围再次应用substring-before()
只会得到1个结果。
substring-before(//p/font[substring-before(., ":")="Mortal Combat" or substring-before(., ":")="Street Fighter 2"]/text(), ":")
--> "Mortal Combat"
您必须循环匹配的文本节点,并使用编程语言应用substring-before()
或子字符串提取。