gpt4 book ai didi

java - 如何在序列化之前从 DOM 中剥离纯空白文本节点?

转载 作者:太空狗 更新时间:2023-10-29 22:31:32 25 4
gpt4 key购买 nike

我有一些 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();

但是,由于我删除了几个元素节点,最终序列化文档中出现了很多额外的空白。

有没有一种简单的方法可以在将 DOM 序列化为字符串之前(或同时)从 DOM 中删除/折叠多余的空格?

最佳答案

您可以使用 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);
}

如果您想要比使用 XSL 模板更轻松地控制节点删除,则此方法可能很有用。

关于java - 如何在序列化之前从 DOM 中剥离纯空白文本节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/978810/

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