从现有 XML 文件导入节点会添加额外的空行

Importing a node from an existing XML file add extra blank lines

提问人:hfontanez 提问时间:11/3/2023 更新时间:11/3/2023 访问量:20

问:

我有一个与此类似的XML文件

<root>
  <child name=foo>
    <grandchild/>
  </child>
    <grandchild/>
  <child name=bar>
  </child>
</root>

我有一个 Java 函数,它在此 XML 中查找一个节点并将其附加到一个新的 XML 文件中

public void lookup(String attribValue) {
  NodeList nl = null;
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  Document sourceDoc = null;
  try {
    sourceDoc = factory.newDocumentBuilder().parse(new File("MyXML.xml"));
    XPathFactory xPathFactory = XPathFactory.newInstance();
    XPath xpath = xPathFactory.newXPath();

    XPathExpression expr = xpath.compile("//child[@name='" + attribValue + "']");
    nl = (NodeList) expr.evaluate(sourceDoc, XPathConstants.NODESET); 
  } catch (Exception e) {
    throw new RuntimeException(e);
  }

  Node node = nl.items(0);
  if (node.getNodeType() == Node.ELEMENT_NODE) {
    doc.getDocumentElement().appendChild(doc.importNode(node, true));
  } else {
    throw new RuntimeException("Node is not an element");
  }
}

在上面的代码中,是表示目标 XML 的全局变量。问题(尽管很小)是,当保存目标 XML 时,添加了类似于以下示例的额外空行:doc

<target>
  <child='foo'>

    <grandchild/>

  </child>
</target>

如果有更多孙子节点,则每个节点之间将用额外的空行分隔。显然,当我创建目标 XML 时,我调用了一个“漂亮打印”文档的函数。代码如下图所示:

private void writeXML(OutputStream output) {
  TransformerFactory transformerFactory = TransformerFactory.newInstance();
  Transformer transformer = transformerFactory.newTransformer();
  tranformer.setOutputProperty(OutputKeys.METHOD , "xml");
  tranformer.setOutputProperty(OutputKeys.INDENT , "yes");
  tranformer.setOutputProperty(OutputKeys.ENCODING , "UTF-8");
  tranformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION , "no");
  DOMSource source = new DOMSource(doc); // same global variable

  StreamResult result = new StreamResult(output);
  transformer.transform(source, result);
}

我尝试调用 和 在文档上,以及根节点和正在导入的节点上,但无济于事。根据方法文档,我期望的一样多,但我还是尝试了。这没什么大不了的,但发布这个问题让我很困扰。我想删除多余的空行。normalize()normalizeDocument()normalize()

Java DOM

评论


答: 暂无答案