有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    你把引号放错地方了,试试看:

    String expression = "/templatedatabase/datatypes/integers/integer[" + index + "]/@defaultvalue";
    

    这将在XPath表达式中包含index参数的,而不是文字字符串"index"

    不过要提醒一句——当您处理诸如index之类的数值变量时,使用字符串串联动态构造XPath表达式是可以的,但是如果您想为表达式提供任意用户指定的字符串参数,则使用包含以下XPath变量的静态XPath表达式更安全:

    "/templatedatabase/datatypes[@name=$targetName]"
    

    并定义一个XPathVariableResolver来注入实际值