java - 除了如下所示的更改目标之外,我可以保留 xml 格式还是保留原始格式吗?

标签 java xml

我想在改变一些属性值后保持原来的xml格式。除了更改属性之外,如何保持格式?

我使用的是 java8、apache9、eclipseoxy。

例如,我的示例 XML 是

    <a>
     <b id="123"
        name="456"
        value="789">
     <c id="awe"
        name="try">
    </a>

我使用这样的代码。

    Document doc = getConfigDocument();
    NodeList nl = doc.getElementsByTagName("serverInfo");


                       Element oasisElement = (Element) doc.getElementsByTagName("b").item(0);
    oasisElement.setAttribute("id", "1231");

    Transformer tr;
    try
               {
                   tr = TransformerFactory.newInstance().newTransformer();
                   tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
                   tr.setOutputProperty(OutputKeys.INDENT, "yes");
                   tr.transform(new DOMSource(doc), new StreamResult(new File(getConfigRoot())));
                   resultMsg = "success";
               }

这段代码之后,XMl将被重写,并改变格式如下。

<a>
 <b id="1231" name="456" value="789">
 <c id="awe" name="try">
</a>

除了像下面这样的更改目标之外,我可以保持 xml 格式还是保持原始格式吗?

<a>
 <b id="123" name="456" value="789">
 <c id="awe"
    name="try">
</a>

最佳答案

不,XML 解析器不会向应用程序报告详细布局,因此应用程序(在本例中为 XSLT 处理器)无法保留原始布局。

但是,如果输入格式遵循系统规则,那么您也许能够让序列化程序(处理 XSLT 转换的结果)遵循相同的规则。如果您使用 Saxon 序列化器而不是内置 JDK (Xalan) 序列化器,那么您可以通过指定序列化属性获得非常接近您的输入格式的内容:

indent=yes
saxon:indent-spaces=1
saxon:line-length=10
saxon:attribute-order="id name value"

为此,您需要 Saxon-PE 或更高版本。

关于java - 除了如下所示的更改目标之外,我可以保留 xml 格式还是保留原始格式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56070757/

相关文章:

java - fragment 中的Android "Only the original thread that created a view hierarchy can touch its views."错误

java - java如何捕获java内部的退出代码?

r - 无法保存 - 在 R 中加载从 rvest 生成的 xml_document

c# - 获取文件中的数据

java - 解码不属于命名空间的 xml 元素

java - 如何在java中使用android 2.2 sdk播放.avi视频?

java - Oracle ADF : DCA-29000: Unexpected exception caught: java. lang.InstantiationException

java - 来自 Fragment 的 Android 对话框

xml - 在 C# 中创建 MS Project XML 文件

java - 数据在 Struts2 中是如何传输的?