我需要一个xpath,它会找到一些包含HTML换行符的文本<br/>
。例如:
<ul>
<li>ABC<br/>DEF</li>
<li>XYZ<br/>NOP</li>
</ul>
假设我正在尝试查找包含li
的{{1}}。我尝试了以下内容:
ABC<br/><DEF>
但他们什么也没有回报。我看到了这个答案XPath contains(text(),'some string') doesn't work when used with node with more than one Text subnode,但在我的案例中我无法弄清楚如何使用它。
答案 0 :(得分:2)
以下表达式将让您关闭:
li[br[preceding-sibling::node()[1] = 'ABC']
[starts-with(following-sibling::node()[1], 'DEF')]]
如果您只需匹配文字结尾的项目 ABC
,则会更长一些。
以下转换将选择第一个匹配的li
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:template match="/">
<matches>
<xsl:copy-of select="(//li[br[preceding-sibling::node()[1] = 'ABC']
[starts-with(following-sibling::node()[1], 'DEF')]
])
[1]" />
</matches>
</xsl:template>
</xsl:stylesheet>
输入:
<ul>
<li>ABC<br/>DEF</li>
<li>XYZ<br/>NOP</li>
<li><p>XYZ<br/>NOP</p></li>
<li>ABC<br/>DEF</li>
<li>DEF GHI</li>
<li>ABC<![CDATA[<br/>]]>DEF</li>
</ul>
输出:
<?xml version="1.0" encoding="utf-8"?>
<matches>
<li>ABC<br />DEF</li>
</matches>
答案 1 :(得分:-1)
//li[br]
这应该有效。这意味着:选择所有具有 br 子
的 li 元素