gpt4 book ai didi

java - 前缀为 'uml' 的 JDOM2 命名空间尚未声明

转载 作者:行者123 更新时间:2023-11-30 04:01:24 25 4
gpt4 key购买 nike

我正在尝试通过 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']”?

致以诚挚的问候

最佳答案

命名空间在 XML 中声明,但您还必须 register it for the XPath query .

XPathExpression<Element> xp =
xpfac.compile("//uml:Model/packagedElement[@name='Content']",
Filters.element(),
null,
Namespace.getNamespace("uml", "http://www.omg.org/spec/UML/20090901"));

关于java - 前缀为 'uml' 的 JDOM2 命名空间尚未声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21914748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com