gpt4 book ai didi

java - 如何让Java.xml.Transformer 输出一个没有无用空格和换行符的xml?

转载 作者:行者123 更新时间:2023-11-30 06:57:19 27 4
gpt4 key购买 nike

我现在的代码:

import org.w3c.dom.Node;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.StringWriter;

private String getStringByJAXP(Node input) {
StreamResult xmlOutput;
try {
xmlOutput = new StreamResult(new StringWriter());
transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(input), xmlOutput);
} catch (TransformerException e) {
throw new IllegalArgumentException();
}
return xmlOutput.getWriter().toString();
}

输出:

<aaa>
<a>text a</a>
<b>
<c>text c</c>
</b>
<f>
<g><h a="xxx"/></g>
</f>
</aaa>

但是我想输出如下:

<aaa><a>text a</a><b><c>text c</c></b><f><g><h a="xxx" /></g></f></aaa>

请注意,我无法通过一些简单的字符串替换来完成该任务,因为 <a>text a</a> 中的空格不应被替换( <a>texta</a><a>text a</a> 完全不同)。

编辑:

OutputKeys.INDENT, "no"不起作用。更新代码:

private String getStringByJAXP(Node input) {
StreamResult xmlOutput;
try {
xmlOutput = new StreamResult(new StringWriter());
transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperty(OutputKeys.INDENT, "no");
transformer.transform(new DOMSource(input), xmlOutput);
} catch (TransformerException e) {
throw new IllegalArgumentException();
}
return xmlOutput.getWriter().toString();
}

最佳答案

我曾经遇到过类似的情况。我首先尝试了 transformer.setOutputProperty(OutputKeys.INDENT,"no");,但这没有用。问题是我的原始节点有额外的“换行”文本节点。

Strip whitespace and newlines from XML in Java 的答案帮我修好了。基本上,您只需在转换父节点之前删除不需要的文本节点。

我最终使用了这个:

public static void trimWhitespace(Node node)
{
NodeList children = node.getChildNodes();
for(int i = 0; i < children.getLength(); ++i) {
Node child = children.item(i);
if(child.getNodeType() == Node.TEXT_NODE) {
child.setTextContent(child.getTextContent().trim());
}
trimWhitespace(child);
}
}

关于java - 如何让Java.xml.Transformer 输出一个没有无用空格和换行符的xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33564043/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com