Java——SAX生成XML文件


SAX生成XML文件 

准備工作

創建一個SAXTransformerFactory 類對象

//創建一個 SAXTransformerFactory 類對象
SAXTransformerFactory tff = (SAXTransformerFactory)SAXTransformerFactory.newInstance();

通過SAXTransformerFactory 對象創建一個 Transformer 對象

//通過 SAXTransformerFactory 對象創建一個 TransformerHandler 對象
TransformerHandler handler = tff.newTransformerHandler();

設置 xml 文件編碼格式和自動換行

//設置生成的 XML 文件編碼格式
tr.setOutputProperty(OutputKeys.ENCODING, "utf-8");
//設置生成的 XML 文件自動換行
tr.setOutputProperty(OutputKeys.INDENT, "yes");

 判斷生成的 xml 文件 是否存在,不存在就創建一個新的

//如果不存在,就創建一個新的 XML 文件
File file = new File("newSchool.xml");
if (!file.exists()) {
    file.createNewFile();
}

 

創建一個 Result 對象,並且使其與 TransformerHandler對象關聯

//創建一個Result 對象,並且使其與 TransformerHandler 對象關聯
Result result = new StreamResult(new FileOutputStream(file));
handler.setResult(result);

 


 

 

利用 handler 對象進行 xml 文件內容的編寫

打開 document

//打開 document
handler.startDocument();

生成根節點標簽

AttributesImpl atts = new AttributesImpl();
//根節點開始標簽
handler.startElement("", "", "School", atts);

設置字節點的屬性和屬性值 並創建子節點的開始標簽

//設置屬性和屬性值
atts.addAttribute("", "", "id", "", "1");
//子節點開始標簽
handler.startElement("", "", "student", atts);

 

創建子節點下的 name 節點並給其添加內容

atts.clear();  //清空子節點設的值
//字節點下name節點開始標簽
handler.startElement("", "", "name", atts);
String name="小王";
handler.characters(name.toCharArray(), 0, name.length());
//字節點下name節點結束標簽
handler.endElement("", "", "name");

 

有開始就結束,在 XML 當中標簽都是成對出現的,下面就是結束標簽,以及關閉 document對象

//子節點結束標簽
handler.endElement("", "", "student");
            
//根節點結束標簽
handler.endElement("", "", "School");
            
//關閉 document
handler.endDocument();

 

運行結果:

<?xml version="1.0" encoding="utf-8"?><School>
<student id="1">
<name>小王</name>
</student>
</School>

完整代碼:

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;

public class CreateXMLBySAX {

    public static void main(String[] args) {
        
        //創建一個 SAXTransformerFactory 類對象
        SAXTransformerFactory tff = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
    
        try {
            //通過 SAXTransformerFactory 對象創建一個 TransformerHandler 對象
            TransformerHandler handler = tff.newTransformerHandler();
            //通過 TransformerHandler 對象創建一個 Transformer 對象
            Transformer tr = handler.getTransformer();
            //設置生成的 XML 文件編碼格式
            tr.setOutputProperty(OutputKeys.ENCODING, "utf-8");
            //設置生成的 XML 文件自動換行
            tr.setOutputProperty(OutputKeys.INDENT, "yes");
            //如果不存在,就創建一個新的 XML 文件
            File file = new File("newSchool.xml");
            if (!file.exists()) {
                file.createNewFile();
            }
            //創建一個Result 對象,並且使其與 TransformerHandler 對象關聯
            Result result = new StreamResult(new FileOutputStream(file));
            handler.setResult(result);
            
            //利用 handler 對象進行 XML 文件內容的編寫
            //打開 document
            handler.startDocument();
            //為了創建節點屬性和屬性值
            AttributesImpl atts = new AttributesImpl();
            //根節點開始標簽
            handler.startElement("", "", "School", atts);
            //atts.clear();  //清空 atts 的值
            //設置屬性和屬性值
            atts.addAttribute("", "", "id", "", "1");
            //子節點開始標簽
            handler.startElement("", "", "student", atts);
            
            atts.clear();  //清空子節點設的值
            //字節點下name節點開始標簽
            handler.startElement("", "", "name", atts);
            String name="小王";
            handler.characters(name.toCharArray(), 0, name.length());
            //字節點下name節點結束標簽
            handler.endElement("", "", "name");
            //子節點結束標簽
            handler.endElement("", "", "student");
            
            //根節點結束標簽
            handler.endElement("", "", "School");
            
            //關閉 document
            handler.endDocument();
            
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }
        
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM