Java XPath表达式以查找所有存在的元素

Java XPath表达式以查找所有存在的元素,java,xpath,Java,Xpath,我需要一个XPath表达式的帮助,该表达式匹配所有元素,无论它们位于何处。这个 for (String tag:tags) { StringBuffer expression = new StringBuffer("//" + tag + "/text()");} } 这与所有内容都匹配,但现在我需要为可能的XPath注入应用修复程序。因此,我尝试使用XPathVarableResolver实现这一点 for (String tag:tags) { MapVariableResolve

我需要一个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表达式=新的StringBuffer(“/$tag/text()”)

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

假设
$tag
存储为XPath字符串变量,您可以通过比较元素名称来尝试筛选元素,如下所示:

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

非常感谢你。这就是我要找的。你能解释一下*的用途吗?如果我想做这样的事情(//tag1/tag2/text()),我需要在像这样的tag2之前加*吗//*[name()=$tag1]/*[nam()=$tag2]/text()