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;
}
我不知道有沒有辦法,但爲什麼要麻煩?例如,如果您擔心以後比較文件,那麼請使用一個好的XML比較工具,如Altova DiffDog,它可以忽略屬性順序。 – Maestro13 2012-04-28 10:41:57
http://stackoverflow.com/questions/726395/order-of-xml-attributes-after-dom-processing – 2012-04-28 11:27:06
XML Infoset中沒有這樣的事情(XPath 1.0數據模型)作爲「屬性」。它們的序列化順序取決於XSLT處理器的實現。但是,如果向我們展示XSLT代碼和(儘可能細緻的)XML文檔,以便可以獨立重新報告結果,那麼可能會提出可能會導致序列化屬性的其他順序的重構。 – 2012-04-28 13:41:39