好的,我有适用于此 xml 的代码:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<record-table>
<record>
<record_id>1</record_id>
<record_rows>
<record_row>abcdef</record_row>
</record_rows>
</record>
<record>
<record_id>2</record_id>
<record_rows>
<record_row>abcdef</record_row>
<record_row>abcdef</record_row>
</record_rows>
</record>
</record-table>
该代码将初始 XML 文件拆分为 2 个文件,并随后尝试添加一些标签。
import java.io.*;
import java.io.FileReader;
import java.io.FileWriter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stax.StAXResult;
import javax.xml.transform.stream.StreamResult;
import javax.xml.stream.XMLStreamException;
import java.io.FileOutputStream;
import javax.xml.transform.OutputKeys;
public class ver2 {
public static void main(String[] args) throws Exception {
XMLInputFactory xif = XMLInputFactory.newInstance();
xif.setProperty("javax.xml.stream.isCoalescing", true);
XMLStreamReader xsr = xif.createXMLStreamReader(new FileReader("out.xml"));
XMLOutputFactory factory = XMLOutputFactory.newInstance();
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
xsr.nextTag();
int i=0;
while(xsr.hasNext()) {
int event = xsr.next();
if (event== XMLStreamConstants.START_ELEMENT){
if (xsr.getLocalName().equals("record")){
i++;
File file = new File(i + ".txt");
try {
XMLStreamWriter writer = factory.createXMLStreamWriter(new FileWriter(file));
t.transform(new StAXSource(xsr), new StAXResult(writer));
writer.writeStartElement("addSomeTags");
writer.writeCharacters("\r\n");
writer.writeStartElement("somestuff");
writer.writeEndElement();
writer.writeEndElement();
writer.flush();
writer.close();
} catch (XMLStreamException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
问题是,当我在记事本中打开生成的文件时,记事本无法识别换行符。 (可能是因为它们是“/n”,而不是“/n/r”)同时,如果我将 StaxSource 转换为 StreamResult(不使用 XMLStreamWriter)记事本会识别它们。您能解释一下为什么会发生这种情况,以及如何使其格式正确吗?
(但据您了解,它在写字板或其他文本编辑器(包括这个编辑器)中正确呈现)
Also,如果这种方式在某种程度上有悖常理,请告诉我。
更改代码自
writer.writeCharacters("\r\n");
to
write.writeCharacters(System.getProperty("line.separator"));
这是更通用的并且应该工作得更好
比\r\n
这只适用于 Windows。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)