[英]XML writing in java creating unnecessary new lines
我正在使用 w3c DOM 編寫 xml 文件。 當我用來創建第一個子節點時沒有出現問題。 第二次,如果我在預先存在的文件中添加一個新節點,它會在以前的節點中創建不需要的新行,並且每次我用來插入新節點時新行都會不斷增加。 這是我的代碼...
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new File("D:\\TestXml.xml"));
Element rootElement = doc.getDocumentElement();
Element supercar = doc.createElement("supercars");
rootElement.appendChild(supercar);
Element carname = doc.createElement("carname");
carname.appendChild(doc.createTextNode("Ferrari 103"));
supercar.appendChild(carname);
Element carname1 = doc.createElement("carname");
carname1.appendChild(doc.createTextNode("Ferrari 204"));
supercar.appendChild(carname1);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("D:\\TestXml.xml"));
transformer.transform(source, result);
這是生成的文件。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<cars>
<supercars>
<carname>Ferrari 101</carname>
<carname>Ferrari 202</carname>
</supercars>
<supercars>
<carname>Ferrari 103</carname>
<carname>Ferrari 204</carname>
</supercars>
</cars>
上面的代碼用於 append 的第二個節點第一次生成的文件沒有額外的新行。 如果添加 10 個新節點,該文件會包含太多不必要的新行,從而導致超過 300 行。 文件大小也增加了。 我無法得出為什么會發生這種情況的結論。 每個新節點插入都會出現問題。 任何建議都會非常有幫助。
考慮運行恆等變換 XSLT ,其中它的<xsl:strip-space>
刪除節點之間的此類換行符和空格。 您可以輕松地將 XSLT 合並到現有代碼中:
XSLT (另存為.xsl文件,原樣復制整個文件)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Java
import javax.xml.transform.stream.StreamSource;
...
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new File("D:\\TestXml.xml"));
Element rootElement = doc.getDocumentElement();
Element supercar = doc.createElement("supercars");
rootElement.appendChild(supercar);
Element carname = doc.createElement("carname");
carname.appendChild(doc.createTextNode("Ferrari 103"));
supercar.appendChild(carname);
Element carname1 = doc.createElement("carname");
carname1.appendChild(doc.createTextNode("Ferrari 204"));
supercar.appendChild(carname1);
Source xslt = new StreamSource(new File("C:\\Path\\To\\Style.xsl")); // LOAD STYLESHEET
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(xslt); // APPLY XSLT
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("D:\\TestXml.xml"));
transformer.transform(source, result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.