以下代码
import java.io.File;
import java.io.FileReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamResult;
public class Demo {
public static void main(String[] args) throws Exception {
XMLInputFactory xif = XMLInputFactory.newInstance();
XMLStreamReader xsr = xif.createXMLStreamReader(new FileReader("out.xml"));
xsr.nextTag(); // Advance to statements element
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
while(xsr.nextTag() == XMLStreamConstants.START_ELEMENT) {
t.transform(new StAXSource(xsr), new StreamResult("result.txt"));
}
}
}
生成一些txt,并在其第一行有处理指令(<?xml version="1.0">
)。它们来自哪里以及如何摆脱它们?以及如何操纵它们?
答案 0 :(得分:0)
行<?xml version="1.0"?>
是一个xml声明。根据{{3}}
XML文档应该以XML声明开头,该声明指定正在使用的XML版本。
它应该在那里(尽管不是强制性的)。
顺便说一下。在严格的技术意义上,它不是处理指令。
编辑:可以使用以下命令更改编码:
t.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
答案 1 :(得分:0)
您可以通过在变换器上设置output properties来禁用xml声明的创建:
t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
如果要从xml生成文本文件,那么您可能希望在TransformerFactory.newInstance
调用中指定XSLT源并在该XSLT中设置输出属性。