XML处理指令

时间:2014-02-12 16:47:16

标签: java xml

以下代码

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">)。它们来自哪里以及如何摆脱它们?以及如何操纵它们?

2 个答案:

答案 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中设置输出属性。