javax.xml.transform.Transformer 转换后交换元素属性

标签 java xml xslt

我正在尝试打开 XML 文件,添加一些更改,然后保存到其他 XML 文件结果。我正在使用标准 javax.xml.parsers.* 和 javax.xml.transform* 类。

但在保存的文档中,某些元素中的属性会被交换,例如:

曾经:

<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 中的属性顺序并不重要,XSLT 明确允许系统以任何顺序报告属性,并且无法控制属性序列化的顺序。

关于javax.xml.transform.Transformer 转换后交换元素属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362593/

相关文章:

c++ - 如何使用标准 C++ 将 C 字符串转换为 XML?

xslt - 按 xml 字母顺序对数据进行排序

xml - 如何使用 XSLT 转换已转换的 XML

android - 将 Tab Activity 放在屏幕底部

java - 即使在无效后 session 值仍然可见

java - 我可以减少代码重复,而不过度降低效率或引入开销吗?

java - eclipse调试器: enter a method without entering nested methods

xml - xslt 通过跳过一些元素将 xml 转换为文本

java - docx4j 3.0 pdf 导出失败并出现 Docx4JException

java - Hibernate Projection select语句导致Internal Server Error