为什么调用 setTextContent 没有出现在转换后的输出中?

Why does calling setTextContent not appear in the transformed output?

以下 dom 操作应该会产生不同的输出,但事实并非如此。 println 表明它已经工作,但根 node.toString() 或使用 Transformer 失败,结果相同。

  private void markNewLinesInTextNodes(Node node) {
    for(int i = 0 ; i < node.getChildNodes().getLength() ; i++) {
      Node child = node.getChildNodes().item(i);
      markNewLinesInTextNodes(child);
    }
    if (node instanceof Element) {
      Element el = (Element) node;
      if (el.getTagName().toLowerCase().equals("text")) {
        el.setTextContent(el.getTextContent().replaceAll("\n", "_LINEBREAK_"));
        System.out.println(el.getTextContent());
      }
    }
  }

这个有效:

  if (el.getTagName().toLowerCase().equals("text")) {
    el.setTextContent(el.getTextContent().replaceAll("\n", "_LINEBREAK_"));
    System.out.println(el.getTextContent());

然后:

  • 你确定选择了吗?

  • 如何输出?

试试看:

TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
StringWriter buffer = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(document),
      new StreamResult(buffer));
String result= buffer.toString();
System.out.println(result);