我需要一个XPath表达式的帮助,该表达式匹配每个元素,无论它们在哪里。这个
for (String tag:tags) {
StringBuffer expression = new StringBuffer("//" + tag + "/text()");}
}
这匹配了一切,但现在我需要对可能的XPath注入应用修复。所以我试图使用XPathVarableResolver来实现它。
for (String tag:tags) {
MapVariableResolver vr = new MapVariableResolver();
vr.addVariable(new QName(null, "tag"), tag);
xPath.setXPathVariableResolver(vr);
StringBuffer expression = new StringBuffer("//$tag/text()");}
XPathExpression expr = xPath.compile(expression.toString());
nodeList = (NodeList) expr.evaluate(doc,XPathConstants.NODESET);
}
但是我遇到了XPath异常的异常。 javax.xml.transform.TransformerException:在'/'或'//'标记后面需要一个位置步骤。
StringBuffer expression = new StringBuffer(“// $ tag / text()”);
这里的正确表达是什么? “// $标签/文本()” ??
答案 0 :(得分:1)
假设$tag
存储为XPath字符串变量,您可以尝试通过比较其名称来过滤元素,如下所示:
StringBuffer expression = new StringBuffer("//*[name()=$tag]/text()");