2014-02-20 116 views
1

我想通过JDOM的XPathExpression选项获取元素。带前缀'uml'的JDOM2名称空间尚未声明

我的代码如下所示:

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']”?

问候

回答

2

的命名空间在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")); 
+0

非常感谢您,我之前没有得到过...只是从JDOM开始 – Belenus

相关问题