我正在使用以下XPath表达式来遍历XML文档:
/templatedatabase/datatypes/integers/integer[index]/@defaultvalue
方法标题:
private static String getGetDefaultValueByIndex(Document doc, XPath xpath, int index)
“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;
}
}
答案 0 :(得分:0)
你的报价错误,请尝试:
String expression = "/templatedatabase/datatypes/integers/integer[" + index + "]/@defaultvalue";
这将包含index
参数的值到XPath表达式中,而不是文字字符串"index"
。
尽管有一个警告 - 使用字符串连接动态构建XPath表达式在处理index
之类的数值变量时很好,但是如果要提供任意用户指定的字符串表达式的参数使用静态XPath表达式更安全,包括XPath变量,如
"/templatedatabase/datatypes[@name=$targetName]"
并定义XPathVariableResolver
以注入实际值。