2012-04-28 7 views
0

XMLファイルを開き、いくつかの変更を追加して他のXMLファイルの結果に保存しようとしています。標準のjavax.xml.parsers。*クラスとjavax.xml.transform *クラスを使用しています。javax.xml.transform.Transformerは、変換後に要素の属性をスワップします

しかし、保存された文書には、いくつかの要素の属性は、例えば、スワップされています

ました:

<affiliation xml:id="curr1" countryCode="HU"> 

そして、変換後:

<affiliation countryCode="HU" xml:id="curr1"> 

要素 "COUNTRYCODE" と「XML :id "がスワップされます。

属性のスワップを制限する方法はありますか?

オープニング/ XMLを保存するコード:

// Imports 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerConfigurationException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult;  


// Opening 
Document document = getDocumentBuilder().parse(src); 

// Saving 
getTransformer().transform(new DOMSource(document), new StreamResult(dst)); 

private DocumentBuilder getDocumentBuilder() throws ParserConfigurationException { 
    return documentBuilder == null ? documentBuilder = documentBuilderFactory.newDocumentBuilder() : documentBuilder; 
} 

private Transformer getTransformer() throws TransformerConfigurationException { 
    return transformer == null ? transformer = transformerFactory.newTransformer() : transformer; 
} 
+0

方法があるかどうかわかりませんが、なぜ気になるのですか?たとえば、後でファイルを比較することを心配する場合は、Altova DiffDogのような優れたXML比較ツールを使用してください。これは属性の順序を無視できます。 – Maestro13

+0

http://stackoverflow.com/questions/726395/order-of-xml-attributes-after-dom-processingの複製 –

+0

XML Infoset(XPath 1.0データモデル)には、 "属性 "と呼ばれる。それらがシリアル化される順序は、XSLTプロセッサの実装に依存します。しかし、XSLTコードと可能な限り最少のXML文書を表示して、報告された結果を個別に再現できるようにすると、リファクタリングを提案することができます。その結果、シリアル化された属性。 –

答えて

1

いいえ、XMLの順序属性が重要ではなく、XSLTを明示的にシステムがどのような順序で属性を報告することができ、その順序に対する制御を与えません属性はシリアライズされます。

関連する問題