java - 使用 xpath 查找带撇号的文本 ( "' ")

标签 java xpath

我研究了又研究,但似乎没有任何效果。假设我想要一个带有文本“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&apos;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/

相关文章:

java - 了解 JVM 堆打印输出中的元空间行

java - MS SQL 中的 SELECT 语句返回丢失 2-4 天的日期

java - Spark : rewrite . 过滤器 ("count > 1") 没有字符串表达式

java - 如何在 Android 中使用 Xpath 比较日期

javascript - 使用 typescript 处理 Protractor 下拉列表的问题

java - 我们如何通过使用泛型/任何其他方式删除代码冗余/改进代码

java - 使用BufferedImage和ImageIO保存图像时内存不足的问题

html - 如何使用 XPath 获取位置?

xml - 需要根据两个元素对节点进行分组并对第三个元素求和。 key ?多变的?

xml - xpath 在属性不存在时按属性选择