XPath查找带有HTML换行符的元素

时间:2014-01-03 21:46:59

标签: xpath

我需要一个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,但在我的案例中我无法弄清楚如何使用它。

2 个答案:

答案 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 元素