我有一些这样的HTML代码
<td>
<a href="CMenu?op=m&menuID=42&rurl={{rurl}}" title="Edit menu">
<img border="0" alt="" src="Images/application.gif">
Case
</a>
</td>
需要找到文字“案例” 我使用不同的XPath查询,但没有人是好的,都找不到任何东西:
//a[text() = ' Case']
//a[text() = 'Case']
//td/a[normalize-space(text()) = 'Case']
//td[a[normalize-space(.) = 'Case']]
//td[a[normalize-space(text()) = 'Case']]
//*[starts-with(.," Case")]
//*[starts-with(.,"Case")]
但是,当我尝试用
找到这个项目时//a[contains(.,'Case') and string-length() = 5]
它可以工作,但是我不能接受硬代码'5',我想把这个XPath多功能用于其他相关项目。
如果我使用
//a[contains(.,'Case')]
我找到一个包含'Case'的项目列表,但只需要一个包含'Case'而不是更多chars的项目。 也许我做错了什么,只想把它告诉我。
我的同事告诉我,我可以使用这个XPath
//a[substring(text(),2)='Case']
跳过这个空间。我发现它的功能!但在我看来,还有另一种解决我的问题的方法,没有任何跳过或通过。
答案 0 :(得分:4)
使用强>:
/td/a
[starts-with(normalize-space(), ' Case')]
XPath不是实体感知的,normalize-space()
根据定义只处理空白字符:space,NL,CR和Tab - 所以 
(这是实体
被展开的内容不被视为空格字符。
基于XSLT的验证:
此转换选择上述XPath表达式并输出结果:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select=
"/td/a
[starts-with(normalize-space(), ' Case')]
"/>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档:
<td>
<a href="CMenu?op=m&menuID=42&rurl={{rurl}}" title="Edit menu">
<img border="0" alt="" src="Images/application.gif"/>
 Case
</a>
</td>
产生了想要的正确结果:
<a href="CMenu?op=m&menuID=42&rurl={{rurl}}" title="Edit menu">
<img border="0" alt="" src="Images/application.gif" />
Case
</a>
答案 1 :(得分:0)
您可能还想尝试//匹配[匹配(。,'^ \ W * Case \ W * $')],它们将匹配值为“Case”的元素,可能包含其他一些非单词字符(除了字母,数字和_之外的任何事情我都认为。)