在java中为xpath表达式动态赋值
我正在尝试使用java从WSDL文件动态创建gui。 我需要检索与每个操作相关的消息。 为此,我需要动态地分配XPath表达式值。 我将表达式赋值如下在java中为xpath表达式动态赋值,java,xpath,wsdl,Java,Xpath,Wsdl,我正在尝试使用java从WSDL文件动态创建gui。 我需要检索与每个操作相关的消息。 为此,我需要动态地分配XPath表达式值。 我将表达式赋值如下 String expression="/definitions/portType/operation[@name="+oper[i]+"]/*"; NodeList msglist= (NodeList)xpath.expressionxpath.compile(expression1).evaluate(doc,XPathCons
String expression="/definitions/portType/operation[@name="+oper[i]+"]/*";
NodeList msglist= (NodeList)xpath.expressionxpath.compile(expression1).evaluate(doc,XPathConstants.NODESET);
System.out.println("The Number of messages are"+msglist.getLength());
这里oper[i]是包含操作名列表的数组。
但当我在msglist中打印节点数时,它不起作用,它总是显示0。
我的WSDL文件包含操作元素的2个子元素。
有人能帮我吗??
提前感谢从评论中,模式是:
/definitions/portType/opeation[@name=sayHello]/*
缺少匹配字符串周围的引号。应该是:
/definitions/portType/opeation[@name="sayHello"]/*
String expression="/definitions/portType/operation[@name=\""+oper[i]+"\"]/*";
因此,您的模式应该是:
/definitions/portType/opeation[@name="sayHello"]/*
String expression="/definitions/portType/operation[@name=\""+oper[i]+"\"]/*";
使用MessageFormat
或String.format
可能更清楚:
String expression=String.format("/definitions/portType/operation[@name=\"%s\"]/*", oper[i]);
您的错误是缺少引号。但是,至少出于三个原因,您应该尽量避免通过字符串串联来构造XPath表达式:
- 很容易犯你犯的那种错误
- 让自己暴露在代码注入攻击面前是一种严重的危险
- 演出
String expression="/definitions/portType/operation[@name=$param]/*";
执行表达式时,可以将值绑定到变量。用于此目的的JAXP机制(定义一个VariableResolver)不是特别优雅,但它很容易使用。您的XPath表达式可以完成这项工作吗;你检查过了吗?尝试在concat之后打印表达式并进行检查-在我看来,表达式中缺少引号。是的,我检查了它,它正在打印所需的结果。您可以发布生成的表达式吗?当我尝试计算表达式时,msglist不包含任何内容。我不知道有什么问题它?/definitions/portType/operation[@name=sayHello]/*它正在工作!!非常感谢你