Dav*_*e G 5 java xpath parameterization
是否可以使用库存JAX-P xpath表达式引擎或其他兼容引擎来编译允许参数化的xpath表达式?
我想看看是否有一个API允许开发人员在编译的xpath中设置占位符并在运行时替换这些值.
任何关于这是否有可能的见解,以及是否有警告,陷阱,或只是简单的"不做那种"类型的建议将不胜感激.
(注意我纠正了"穿越溪流"......正在与同事就xpath和正则表达方式进行对话......恰好在精神上与舌头绑在一起...对不起混淆)
Way*_*ett 10
这是一个非常简单的实现 javax.xml.xpath.XPathVariableResolver
import java.util.HashMap;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.xpath.XPathVariableResolver;
public class SimpleVariableResolver implements XPathVariableResolver {
private static final Map<QName, Object> vars =
new HashMap<QName, Object>();
public void addVariable(QName name, Object value) {
vars.put(name, value);
}
public Object resolveVariable(QName name) {
return vars.get(name);
}
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
public static void main(String[] args) throws ParserConfigurationException,
SAXException, IOException, XPathExpressionException {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("workbook.xml");
XPath xpath = XPathFactory.newInstance().newXPath();
SimpleVariableResolver resolver = new SimpleVariableResolver();
resolver.addVariable(new QName(null, "id"), 2);
xpath.setXPathVariableResolver(resolver);
XPathExpression expr = xpath.compile("/root/element[@id=$id]");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getTextContent());
}
}
Run Code Online (Sandbox Code Playgroud)
在这份文件上:
<root>
<element id="1">one</element>
<element id="2">two</element>
<element id="3">three</element>
</root>
Run Code Online (Sandbox Code Playgroud)
输出:
two
Run Code Online (Sandbox Code Playgroud)
我不太确定“正则表达式”在哪里适合您的问题。
JAXP API 允许 XPath 表达式包含变量(例如//emp[ssn=$e]),并且在运行时通过调用作为 API 的一部分提供的 VariableResolver 来获取变量的值。JAXP 规范对可接受的值类型相当松散,这可能因一种实现而异。
Saxon XPath API (s9api) 更进一步,允许您在编译表达式时显式声明变量及其类型,然后在执行表达式时为变量(任何 XPath 2.0 类型)提供值。
| 归档时间: |
|
| 查看次数: |
2592 次 |
| 最近记录: |