2014-02-20 74 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

相關問題