gpt4 book ai didi

java - 如何在 XPath 查询中使用 Java String 变量

转载 作者:数据小太阳 更新时间:2023-10-29 02:19:53 24 4
gpt4 key购买 nike

我有 books.xml 文件,其中包含作者姓名和书名。我正在使用以下代码片段来查询 books.xml

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr
= xpath.compile("//book[author= 'Larry Niven']/title/text()");

现在,如果我想在程序运行时将名称作为字符串变量传递,而不是直接将名称放入查询中,该怎么做。只输入字符串变量名是行不通的!

最佳答案

这里的问题是当你有像臭名昭著的 Larry “Basher” O'Niven 这样的作者时。

在这种情况下,您需要对变量进行转义,就像在这个简单的实现中一样:

  public static String escape(String s) {
Matcher matcher = Pattern.compile("['\"]")
.matcher(s);
StringBuilder buffer = new StringBuilder("concat(");
int start = 0;
while (matcher.find()) {
buffer.append("'")
.append(s.substring(start, matcher.start()))
.append("',");
buffer.append("'".equals(matcher.group()) ? "\"'\"," : "'\"',");
start = matcher.end();
}
if (start == 0) {
return "'" + s + "'";
}
return buffer.append("'")
.append(s.substring(start))
.append("'")
.append(")")
.toString();
}

这可以用这段代码来演示:

String xml =
"<xml><foo bar=\"Larry &quot;Basher&quot; O'Niven\">Ringworm</foo></xml>";
String query =
String.format("//foo[@bar=%s]", escape("Larry \"Basher\" O'Niven"));
System.out.println(query);
String book = XPathFactory.newInstance()
.newXPath()
.evaluate(query, new InputSource(new StringReader(xml)));
System.out.println(query + " > " + book);

关于java - 如何在 XPath 查询中使用 Java String 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5663285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com