【发布时间】:2014-08-29 14:53:11
【问题描述】:
我有一些大致如下所示的 XML:
<project type="mankind">
<suggestion>Build the enterprise</suggestion>
<suggestion>Learn Esperanto</suggestion>
<problem>Solve world hunger</suggestion>
<discussion>Do Vulcans exist</discussion>
</project>
我想使用 XPath 找出使用 Java 的二级元素的名称(可能有一些我事先不知道的元素)。这是我试过的代码:
public NodeList xpath2NodeList(Document doc, String xPathString) throws XPathExpressionException {
XPath xpath = XPathFactory.newInstance().newXPath();
MagicNamespaceContext nsc = new MagicNamespaceContext();
xpath.setNamespaceContext(nsc);
Object exprResult = xpath.evaluate(xPathString, doc, XPathConstants.NODESET);
return (NodeList) exprResult;
}
我的 XPath 是 /project/*/name()。我得到了错误:
javax.xml.transform.TransformerException:未知节点类型:名称
/project/suggestion 之类的查询按预期工作。我错过了什么?我想得到一个包含标签名称的列表。
【问题讨论】:
-
您使用的是哪个版本的 XPath?
-
你应该使用 /project/@name 而不是 /project/*/name()
-
@aoulhent OP 正在尝试检索
/project/*的元素名称,而不是该属性的内容。 -
@MathiasMüller Java6(不要问)。并感谢澄清。是的,我不需要顶层的属性,而是元素。我会更新问题以消除潜在的混淆