我有一个未格式化的XML文件(只有一行),我想缩进它:
我的档案:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><test>toto</test></Document>
我的java代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.PrintWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
public class PrettyXmlFormat {
public static void main(String[] args) throws Exception {
if(args != null && args.length > 0 && args[0].length() > 0)
{
String FileInputName = "TEST.xml";//"args[0];"
runFormat(FileInputName,true);
}
}
public static void runFormat(String FileInputName, boolean standelone) throws Exception {
String FileOutputName = FileInputName + "MOD";
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream(new File(FileInputName)));
doc.setXmlStandalone(standelone);
prettyPrint(doc,FileOutputName);
}
public static final void prettyPrint(Document xml , String FileOutputName) throws Exception {
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.setOutputProperty(OutputKeys.INDENT, "yes");
PrintWriter FileOut = new PrintWriter(new FileWriter(FileOutputName));
tf.transform(new DOMSource(xml), new StreamResult(FileOut));
}
}
我尝试过使用doc.setXmlStandalone(standelone);
使用doc.setXmlStandalone(true)我有这个结果:
<?xml version="1.0" encoding="UTF-8"?><Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<test>toto</test>
</Document>
使用doc.setXmlStandalone(false)我有这个结果:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<test>toto</test>
</Document>
我希望我得到独立的值和xml声明之后的转义:
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<test>toto</test>
</Document>
你知道吗?
谢谢 !
答案 0 :(得分:2)
您必须将OutputKeys.DOCTYPE_PUBLIC
设置为是
transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "yes");