Mar*_*ski 18 java xml whitespace dom
我有一些Java(5.0)代码从各种(缓存)数据源构造DOM,然后删除不需要的某些元素节点,然后使用以下方法将结果序列化为XML字符串:
// Serialize DOM back into a string
Writer out = new StringWriter();
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
tf.setOutputProperty(OutputKeys.INDENT, "no");
tf.transform(new DOMSource(doc), new StreamResult(out));
return out.toString();
Run Code Online (Sandbox Code Playgroud)
但是,由于我要删除多个元素节点,最终在最终的序列化文档中会有很多额外的空格.
是否有一种简单的方法可以在将序列化为字符串之前(或同时)从DOM中删除/折叠无关的空格?
Jam*_*rty 34
您可以使用XPath找到空文本节点,然后以编程方式删除它们,如下所示:
XPathFactory xpathFactory = XPathFactory.newInstance();
// XPath to find empty text nodes.
XPathExpression xpathExp = xpathFactory.newXPath().compile(
"//text()[normalize-space(.) = '']");
NodeList emptyTextNodes = (NodeList)
xpathExp.evaluate(doc, XPathConstants.NODESET);
// Remove each empty text node from document.
for (int i = 0; i < emptyTextNodes.getLength(); i++) {
Node emptyTextNode = emptyTextNodes.item(i);
emptyTextNode.getParentNode().removeChild(emptyTextNode);
}
Run Code Online (Sandbox Code Playgroud)
如果您希望更多地控制节点删除,而不是使用XSL模板轻松实现,则此方法可能很有用.
尝试使用以下XSL和strip-space元素来序列化DOM:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
http://helpdesk.objects.com.au/java/how-do-i-remove-whitespace-from-an-xml-document
| 归档时间: |
|
| 查看次数: |
36131 次 |
| 最近记录: |