1

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']" を見つけることができますか?

よろしくお願いします

4

1 に答える 1

2

名前空間は XML で宣言されていますが、XPath クエリにも登録する必要があります

XPathExpression<Element> xp =
    xpfac.compile("//uml:Model/packagedElement[@name='Content']",
        Filters.element(),
        null,
        Namespace.getNamespace("uml", "http://www.omg.org/spec/UML/20090901"));
于 2014-02-20T17:16:25.537 に答える