我想在改变一些属性值后保持原来的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/