有没有办法使用org.w3c.dom打印<tag></tag>
空元素而不是<tag />
?我正在修改需要针对旧版本自己进行差异化的XML文件以供审核。
如果有帮助,将XML写入文件的代码:
TransformerFactory t = TransformerFactory.newInstance();
Transformer transformer = t.newTransformer();
DOMSource source = new DOMSource(doc);
StringWriter xml = new StringWriter();
StreamResult result = new StreamResult(xml);
transformer.transform(source, result);
File f = new File("output.xml");
FileWriter writer = new FileWriter(f);
BufferedWriter out = new BufferedWriter(writer);
out.write(xml.toString());
out.close();
感谢。
答案 0 :(得分:3)
您可能需要考虑将旧XML文件和新XML文件转换为Canonical XML - http://en.wikipedia.org/wiki/Canonical_XML - 然后再将它们与例如分差
James Clark在http://www.jclark.com/xml/
上有一个小型Java程序答案 1 :(得分:1)
我假设空元素实际上是ELEMENT_NODE
s,文档中没有子节点。请尝试向其添加空文本节点。这可能会欺骗作者相信那里有一个文本节点,所以它会把它写出来就像有一个文本节点一样。但是文本节点不会输出任何内容,因为它是一个空字符串。
使用文档作为两个参数调用此方法应该可以解决问题:
private static void fillEmptyElementsWithEmptyTextNodes(
final Document doc, final Node root)
{
final NodeList children = root.getChildNodes();
if (root.getType() == Node.ELEMENT_NODE &&
children.getLength() == 0)
{
root.appendChild(doc.createTextNode(""));
}
// Recurse to children.
for(int i = 0; i < children.getLength(); ++i)
{
final Node child = children.item(i);
fillEmptyElementsWithEmptyTextNodes(doc, child);
}
}