Java 编译XPath表达式问题

Java 编译XPath表达式问题,java,xml,xpath,Java,Xml,Xpath,可能重复: 运行此表达式时: XPathExpression xpe = xpath.compile("//bb[name/text()='k2']/value"); 它很好用 但当我尝试种植我自己的变量(而不是“k2”)时,如下所示: XPathExpression xpe = xpath.compile("//bb[name/text()=" + c_name +"]/value"); tt不起作用 我假设问题是工作表达式语法包含'k2',而第二个表达式语法不这

可能重复:

运行此表达式时:

    XPathExpression xpe = xpath.compile("//bb[name/text()='k2']/value");    
它很好用

但当我尝试种植我自己的变量(而不是“k2”)时,如下所示:

    XPathExpression xpe = xpath.compile("//bb[name/text()=" + c_name +"]/value");
tt不起作用

我假设问题是工作表达式语法包含'k2',而第二个表达式语法不这样显示

你知道如何正确地植入变量吗?我试着让字符串和字符[]都不起作用

"//bb[name/text()='" + c_name +"']/value"
请注意,
c\u name
引用周围的单引号

您可以使用
String.format()

更具可读性


正如dogbane所指出的,如果变量值本身包含引号,这将不起作用。有关更复杂但更安全的解决方案,请参见。

-1如果名称为
Scarlett O'Hara
,则该选项不起作用。注意到并引用了一个合适的解决方案通过字符串连接构造XPath表达式会使您面临注入攻击。“使用变量要好得多。”迈克尔承认,这就是我引用附加答案的原因。当然,您的攻击风险取决于您的可变文本源,因此不同的解决方案适用于不同的场景
 "//bb[name/text()='%s']/value".format(c_name)