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']" を見つけることができますか?
よろしくお願いします