提问人:hfontanez 提问时间:11/3/2023 更新时间:11/3/2023 访问量:20
从现有 XML 文件导入节点会添加额外的空行
Importing a node from an existing XML file add extra blank lines
问:
我有一个与此类似的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()
答: 暂无答案
评论