当前位置: 首页 > 面试题库 >

如何在序列化之前从DOM中删除纯空白文本节点?

严俊友
2023-03-14
问题内容

我有一些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序列化为String之前(或同时)从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模板更容易控制节点删除,则此方法可能很有用。



 类似资料:
  • 问题内容: 我需要在PHP中删除空白行(带空格或绝对空白)。我使用此正则表达式,但不起作用: 我想要一个结果: 将: 问题答案: 上面的正则表达式说:

  • 我在SPARQLUPDATE插入操作的帮助下,在我的本体论模型中存储了一些数据。下面是更新查询。 它以以下方式存储在rdf图中: 现在我想用“删除”操作删除这个空白节点。我试过很多方法,但都不管用。有什么建议吗?

  • 用于从CSV中删除空白列的Powershell脚本 我有一个电子表格,我正在将其导入MySQL数据库,由于电子表格中的空白列,导入失败。 是否有一个PowerShell脚本,我可以运行/创建,将检查任何给定的CSV文件并删除空白列? Col1,Col2,Col3,Col4,,,Val1,Val2,Val3,Val4

  • 问题内容: 是否有任何函数调用或简单的方法可以从golang的文本文件中删除前N个字节?假设文件有争议地由各种go例程附加,同时我想删除文件的前N个字节。 问题答案: 您需要跳过第一个字节并进行常规读取,请参见示例:

  • 我有一些代码可以接受3个不同的PDF字节数组并将它们合并。这段代码非常有效。(一些人)面临的问题是,每个PDF都被视为一个完整的页面(如果打印出来的话),即使上面只有4英寸的内容,也会在垂直方向上留下7英寸的空白。然后,中间的文档被放入其中,它的末尾可能有也可能没有垂直的空格。然后,页脚也会放在自己的页面上。 代码如下: 当我合并每个页面时,有没有办法剪辑/删除/擦除每个pdf末尾的垂直空白,使其

  • 我遇到了损坏的CSV问题,它在图像链接中有空白。 CSV文件由我的客户业务合作伙伴自动创建,约22000行。CSV中大约有30个链接被破坏,我无法修复。因为它每3小时更新一次。 所以,我试图想出一个自动的解决方案,但似乎没有任何效果。 问题在于图像链接,如以下链接:https://images.tyroo.de/GISLAVED_ULTRA_SPEED2�.jpg 它以前有空间。一些文件有3个空格