gpt4 book ai didi

java - XML 转换和换行字符

转载 作者:数据小太阳 更新时间:2023-10-29 02:30:25 26 4
gpt4 key购买 nike

好的,我有适用于此 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),记事本会识别它们。您能解释一下为什么会发生这种情况,以及如何使其格式正确吗?

(但如您所知,它在写字板或其他文本编辑器(包括此编辑器)中正确显示)

此外,如果这种方式在某些方面有悖常理,请告诉我。

最佳答案

更改代码自

writer.writeCharacters("\r\n"); 

write.writeCharacters(System.getProperty("line.separator"));

这更通用,应该会更好用比 \r\n 只适用于 Windows。

关于java - XML 转换和换行字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21731363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com