2012-04-28 30 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

我不知道有沒有辦法,但爲什麼要麻煩?例如,如果您擔心以後比較文件,那麼請使用一個好的XML比較工具,如Altova DiffDog,它可以忽略屬性順序。 – Maestro13 2012-04-28 10:41:57

+0

http://stackoverflow.com/questions/726395/order-of-xml-attributes-after-dom-processing – 2012-04-28 11:27:06

+0

XML Infoset中沒有這樣的事情(XPath 1.0數據模型)作爲「屬性」。它們的序列化順序取決於XSLT處理器的實現。但是,如果向我們展示XSLT代碼和(儘可能細緻的)XML文檔,以便可以獨立重新報告結果,那麼可能會提出可能會導致序列化屬性的其他順序的重構。 – 2012-04-28 13:41:39

回答

1

沒有,在XML屬性的順序並不顯著和XSLT明確允許系統報告以任何順序的屬性,並給出了無法控制的順序屬性被序列化。