2011-11-10 19 views
1

XML属性が出力ファイル内にリストされる順序を制御するにはどうすればよいですか?Javaの出力ファイルにおけるXML属性の制御順序

デフォルトではアルファベット順になっているようですが、このXMLを送信しているプログラムは処理していないようです。

zzzzを最初に表示し、次にbbbbbを次のコードに示します。

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
Document doc = docBuilder.newDocument(); 
Element root = doc.createElement("requests"); 
doc.appendChild(root); 
root.appendChild(request); 
root.setAttribute("zzzzzz", "My z value"); 
root.setAttribute("bbbbbbb", "My b value"); 

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
DOMSource source = new DOMSource(doc); 
StreamResult result = new StreamResult(new File(file)); 
transformer.transform(source, result); 
+2

関連http://stackoverflow.com/q/726395/862441およびhttp://stackoverflow.com/q/3184598/862441 – srkavin

答えて

2

ファイルの書き込みにXML DOM APIを使用した場合、同じ問題が発生しました。この問題を解決するには、XMLStreamWriterを使用しなければなりませんでした。属性は、XMLStreamWriterを使用して記述した順序でxmlファイルに表示されます。

+0

ありがとう、これは動作します! – Doug

3

属性の順序は、XMLで重要でないと定義されています。何の準拠XMLアプリケーションが表示される属性の順序に依存して結果を出すべきではありません。したがって、シリアライザ(出力としてレキシカルXMLを生成するコード)では、通常、順序を制御できません。

XMLは人間が読めるように設計されているため、このような制御を美容上の理由から行うのはいいことがあります。だから、その機能を欲しいという正当な理由があります。しかし、実際には、私はそれを提供するシリアライザがないことを知っています。

1

XML正規化では、主にXMLの一部またはすべての署名をチェックできるように、一貫した属性の順序付けが行われますが、その他の潜在的な用途もあります。これはあなたの目的に合うかもしれません。

関連する問題