假设您使用的是Axiom XPath库,而该库又使用Jaxen,则需要按照以下三个步骤以完全可靠的方式执行此操作:
创建一个SimpleVariableContext,并调用context.setVariableValue("val", "value1")将值分配给该变量。
在BaseXPath对象上,调用.setVariableContext()以传递您分配的上下文。
在表达式内部,用于/a/b/c[x=$val]/y引用该值。
考虑以下:
package com.example;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.common.AxiomText;
import org.apache.axiom.om.util.AXIOMUtil;
import org.apache.axiom.om.xpath.DocumentNavigator;
import org.jaxen.*;
import javax.xml.stream.XMLStreamException;
public class Main {
public static void main(String[] args) throws XMLStreamException, JaxenException {
String xmlPayload="val1abc" +
"val2abcd" +
"";
OMElement xmlOMOBject = AXIOMUtil.stringToOM(xmlPayload);
SimpleVariableContext svc = new SimpleVariableContext();
svc.setVariableValue("val", "val2");
String xpartString = "//c[x=$val]/y/text()";
BaseXPath contextpath = new BaseXPath(xpartString, new DocumentNavigator());
contextpath.setVariableContext(svc);
AxiomText selectedNode = (AxiomText) contextpath.selectSingleNode(xmlOMOBject);
System.out.println(selectedNode.getText());
}
}
...作为输出发出:
abcd