我正在尝试通过 JDOM 的 XPathExpression 选项获取元素。
我的代码如下所示:
public static Element getElement(Document doc)
{
XPathFactory xpfac = XPathFactory.instance();
XPathExpression<Element> xp = xpfac.compile("//uml:Model/packagedElement[@name='Content']", Filters.element());
return xp.evaluateFirst(doc);
}
可悲的是,我收到以下错误:
java.lang.IllegalArgumentException:带有前缀“uml”的命名空间尚未声明。
我的文档是这样开始的:
<?xml version='1.0' encoding='UTF-8'?>
<xmi:XMI xmi:version='2.1' xmlns:uml='http://www.omg.org/spec/UML/20090901'...
所以在我看来,命名空间被声明了。如果我使用给定文档的工具检查 xpath 表达式,则找到该元素。
这就是我创建文档的方式:
public static Document readXML(File file)
{
Document doc = null;
try {
doc = new SAXBuilder().build(file);
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return doc;
}
那么,错误在哪里?XpathExpression 如何找到元素 "//uml:Model/packagedElement[@name='Content']" ?
此致