0

できれば標準org.w3c.orgjavax.xmlAPI を使用して、XML ドキュメントで使用されるプレフィックス/名前空間バインディングを取得する方法はありますか? 接頭辞が含まれる要素で再定義される可能性があることを理解しているため、API もそれを考慮できるはずです。

私は、シリアル化された形式の XML ドキュメントを取得し、URI の名前バインディングに of プレフィックスを返すコードを探していMap<String, String>ます (さらに、囲まれた要素の再定義を説明するための API の巧妙さ)。理想的には、ライブラリは、未使用のバインディングを識別/パージしたり、重複したバインディングを最も近い共通の祖先に移動したり (あちこちに複製するのではなく) など、より手の込んだことを行うことができます。

4

1 に答える 1

1

Guava MultiMapを使用した開始は次のとおりです。

Document doc = ...;

Multimap<String, String> bindings = LinkedHashMultimap.create();
DocumentTraversal dt = (DocumentTraversal) doc;
NodeIterator i = dt.createNodeIterator(doc, NodeFilter.SHOW_ELEMENT,
        null, false);
Element element = (Element) i.nextNode();
while (element != null) {
    String prefix = element.getPrefix();
    if (prefix != null) {
        String uri = element.getNamespaceURI();
        bindings.put(prefix, uri);
    }
    element = (Element) i.nextNode();
}

これは、有効なバインディングのみを取得し、デフォルトの名前空間をバインドしません (もちろん修正可能です)。バインディングの再定義は、ドキュメントの順序で表されますが、それらが発生した深さでは表されません。

このメソッドのさらなる改良は、ユースケースに依存すると思います。たとえば、再定義されたバインディングを適切なものにするために、さらにどのような情報が必要ですか?

于 2013-08-22T15:39:50.843 に答える