私はJavaを使用して、いくつかのXMLノードの順序を変更する必要があります。実際にはto canonicalize a WSDL fileが必要ですが、手作業で並べ替えを行う必要があります。
私は、org.w3c.dom.Document
を使用して、すべての子供などに繰り返し使用できますが、かなり面倒です(NodeList
もIterable
ではない)。
私はJavaを使用して、いくつかのXMLノードの順序を変更する必要があります。実際にはto canonicalize a WSDL fileが必要ですが、手作業で並べ替えを行う必要があります。
私は、org.w3c.dom.Document
を使用して、すべての子供などに繰り返し使用できますが、かなり面倒です(NodeList
もIterable
ではない)。
私はdom4jとします。 dom4j Element
にはlive List view of its sub-elementsがあり、並べ替えることができます。そしてVisitor
で、あなたは文書全体を変更することができます。
Document document = DocumentHelper.parseText(someXml);
final Comparator<Element> comparator = new Comparator<Element>() {
public int compare(Element o1, Element o2) {
return o1.getName().compareTo(o2.getName());
}
};
Visitor visitor = new VisitorSupport() {
@Override
public void visit(Element node) {
@SuppressWarnings("unchecked") // dom4j doesn't know generics yet
List<Element> elements = node.elements();
Collections.sort(elements, comparator);
super.visit(node);
}
};
document.accept(visitor);
// now write the document back to a file
それがこれよりもはるかに簡単に取得していません。
更新:ずっと後に私の独自のソリューションを使用しようとした後、私はそれがそのように動作しないことに気づきました。 Element.elements()
によって返されたリストはCollections.sort()
を好きではないので、Element.content()
によって返されたリストを使用する必要があります。残念ながらこれは、コンパレータがElement
ではなくNode
を処理しなければならないことを意味します。これは、混在したコンテンツがあると非常に乱雑になります。
これは、コンパレータが要素の名前の代わりに属性 "name"にアクセスする必要があるだけでいいですね。 – maaartinus
あなたはDOMのようなインターフェースを持つJavaでこのような仕事をするのが面倒であることを認識することになりました。今すぐ次のステップに進んでください.XSLTでははるかに簡単です。
私は最初のチェックアウトをお勧めしますhttp://stackoverflow.com/questions/6446904/how-to-canonicalize-wsdl-files-in-java –
あなたは新しい文書を繰り返して作成する必要があります。 – Dimitri
**明らかに、これは重複するものではなく、単に関連する質問です。**この問題はソートに関するものでした。もう1つは、WSDLの正規の形式がどのように見えるか(そして、ツールがあれば)です。 – maaartinus