[英]Dynamically assign value to xpath expression in java
我試圖通過使用java從WSDL文件動態創建gui。 我需要檢索與每個操作相關的消息。 為此,我需要動態分配XPath表達式值。 我將表達式分配如下
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]+"\"]/*";
使用MessageFormat
或String.format
可能更清楚:
String expression=String.format("/definitions/portType/operation[@name=\"%s\"]/*", oper[i]);
您的錯誤是缺少的引號。 但是,您應該嘗試避免通過字符串連接構造XPath表達式,至少有三個原因:
像你制作的那樣容易出錯
讓代碼注入攻擊開放是一個嚴重的危險
性能
相反,利用XPath表達式可以包含變量引用的事實:
String expression="/definitions/portType/operation[@name=$param]/*";
並且您可以在執行表達式時將值綁定到變量。 用於此的JAXP機制(定義VariableResolver)並不是特別優雅,但它很容易使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.