2016-07-07 83 views
1

我需要XPath表达式的帮助,该表达式匹配每个元素的任何地方。这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()”);

这里的正确表达式是什么? “// $ tag/text()”??

回答

1

假设$tag存储为XPath字符串变量,你可以尝试用它的名字比较如下过滤元素:

StringBuffer expression = new StringBuffer("//*[name()=$tag]/text()"); 
+0

太谢谢你了。这就是我一直在寻找的东西。 – Qajussi

+0

你能解释一下*是为了什么吗? – Qajussi

+0

如果我想要做这样的事情(// tag1/tag2/text()),我需要在tag2之前像这样// * [name()= $ tag1]/* [nam()= $ tag2 ]/文本() – Qajussi

相关问题