java在循环中使用XPath表达式
我使用以下XPath表达式循环遍历XML文档:
/templatedatabase/datatypes/integers/integer[index]/@defaultvalue
方法标题:
private static String getGetDefaultValueByIndex(Document doc, XPath xpath, int index)
“索引”是方法中的一个参数。问题如下:
如果我在方法头中输入一个数字作为参数,那么查询不会返回值。(例如getGetDefaultValueByIndex(doc, xpath, 1)
)
但如果我,比如说,放一个像1,2这样的数字,。。。在执行相同的方法时,我从XML文件中获取所需的数据,以代替查询中的索引。XPath查询是正确的,如果我像这样在查询中手动输入数字,该方法是有效的:
/templatedatabase/datatypes/integers/integer[1]/@defaultvalue
——>;这将返回一个值
然而:
getGetDefaultValueByIndex(doc, xpath, 1)
/templatedatabase/datatypes/integers/integer[index]/@defaultvalue
——>;这不会返回值
我真的不明白为什么这不起作用。我无法想象您不能使用变量循环XPath查询
方法的完整代码:
private static String getGetDefaultValueByIndex(Document doc, XPath xpath, int index) {
String DefaultValue = null;
try {
String expression = "/templatedatabase/datatypes/integers/integer" + "[index]" + "/@defaultvalue";
DefaultValue = (String) xPath.evaluate(expression, doc, XPathConstants.STRING);
System.out.println(DefaultValue);
} catch(XPathExpressionException e) {
e.printStackTrace();
}
return DefaultValue;
}
}
# 1 楼答案
你把引号放错地方了,试试看:
这将在XPath表达式中包含
index
参数的值,而不是文字字符串"index"
不过要提醒一句——当您处理诸如
index
之类的数值变量时,使用字符串串联动态构造XPath表达式是可以的,但是如果您想为表达式提供任意用户指定的字符串参数,则使用包含以下XPath变量的静态XPath表达式更安全:并定义一个
XPathVariableResolver
来注入实际值