我研究了又研究,但似乎没有任何效果。假设我想要一个带有文本“Tony's Computer”的 xpath。我无法执行以下操作:
//*[contains(text(), 'Tony's Computer')]
出于显而易见的原因,y 和 s 之间的 ' 取消了文本的引号。但这也不起作用:
//*[contains(text(), 'Tony\'s Computer')]
还有
//*[contains(text(), 'Tony''s Computer')]
有没有办法摆脱撇号?我找不到任何东西。我能做的最好的事情就是使用 Java 进行以下操作(假设 textToLookFor 有要查找的文本):
String[] fields = textToLookFor.split("'");
String textx = "";
for (int indx = 0; indx < fields.length; indx++) {
String stext = fields[indx];
String cont = "contains(text(),'" + stext + "') ";
if (!textx.isEmpty()) {
textx += " and ";
}
textx += cont;
}
String xpath = "//*[" + textx + "]";
它基本上做了一个
//*[contains(text(),'Tony') and contains(text(), 's Computer')]
我认为这已经足够好了。然而,这并不是完全匹配。例如,它可以找到“托尼和鲍勃的计算机”。
还有其他人成功做到这一点吗?我找不到任何其他解决方案。 顺便说一句,当我找到该元素时,我可以说 String displayed = ele.getText();然后检查 displayed.contains(textToLookFor)。
在这种情况下,我首先需要执行 textToLookFor = textToLookFor.replaceAll("\"", "\\\""); 来转义任何双引号。
最佳答案
我假设您正在使用 XPath 1.0。您是否尝试过在 XPath 中使用实体 '
?
//*[contains(text(), 'Tony's Computer')]
在 XSLT 2.0 中应该可以使用双撇号。因此,另一种选择是使用 Saxon as your XPath engine然后使用 XPath 2.0,则可以执行以下操作:
//*[contains(text(), 'Tony''s Computer')]
关于java - 使用 xpath 查找带撇号的文本 ( "' "),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42834302/