簡體   English   中英

在java中動態地為xpath表達式賦值

[英]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]+"\"]/*";

使用MessageFormatString.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM