首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java XmlPullParser 生成 XML 文件:XmlSerializer 完整示例

     編輯:Java 綜合教學

Java XmlPullParser 生成 XML 文件:XmlSerializer 完整示例

XmlPullParser (XPP) 是輕量級 XML 處理庫,XmlSerializer 用於序列化寫入 XML,適合 Android、Java ME 及對依賴體積敏感的場景。

一、 核心依賴

<dependency>
    <groupId>xmlpull</groupId>
    <artifactId>xmlpull</artifactId>
    <version>1.1.3.1</version>
</dependency>
<!-- 或 xpp3 -->
<dependency>
    <groupId>org.xmlpull.mxp1</groupId>
    <artifactId>mxp1</artifactId>
    <version>1.1.4.5</version>
</dependency>

二、 完整生成代碼

import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;
import java.io.FileOutputStream;
import java.io.IOException;

public class PullProduceDocument {
    public static void main(String[] args) throws Exception {
        // 1. 獲取工廠與序列化器
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        XmlSerializer serializer = factory.newSerializer();

        // 2. 設置輸出目標(文件 + 編碼)
        serializer.setOutput(new FileOutputStream("src/books.xml"), "UTF-8");

        // 3. 寫入文檔頭
        serializer.startDocument("UTF-8", true);  // standalone=true

        // 4. 根元素
        serializer.startTag(null, "books");

        // 5. 循環生成 5 本書
        for (int i = 0; i < 5; i++) {
            serializer.startTag(null, "book");
            serializer.attribute(null, "id", "book" + (i + 1));  // 屬性

            serializer.startTag(null, "name");
            serializer.text("三國演義");  // 文本內容
            serializer.endTag(null, "name");

            serializer.startTag(null, "author");
            serializer.text("羅貫中");
            serializer.endTag(null, "author");

            serializer.startTag(null, "price");
            serializer.text("30$");
            serializer.endTag(null, "price");

            serializer.endTag(null, "book");
        }

        // 6. 關閉根元素與文檔
        serializer.endTag(null, "books");
        serializer.endDocument();

        System.out.println("XML 生成完成:src/books.xml");
    }
}

三、 生成結果 (books.xml)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<books>
  <book id="book1">
    <name>三國演義</name>
    <author>羅貫中</author>
    <price>30$</price>
  </book>
  <book id="book2">
    <name>三國演義</name>
    <author>羅貫中</author>
    <price>30$</price>
  </book>
  ...
</books>

四、 關鍵 API 對照表

方法用途參數說明
setOutput(OutputStream, encoding)設置輸出流與編碼也支持 Writer
startDocument(encoding, standalone)寫入 XML 聲明standalone=true 表示無外部 DTD 依賴
startTag(ns, name)開始元素ns=null 表示無命名空間
attribute(ns, name, value)寫入屬性必須在 startTag 之後、endTag 之前調用
text(String)寫入文本內容自動轉義 < > & ' "
endTag(ns, name)結束元素需與 startTag 配對
endDocument()結束文檔,刷新緩衝區必須調用,否則輸出不全
cdsect(String)寫入 CDATA 區塊大量文本/含特殊字符時使用
comment(String)寫入註釋<!-- comment -->
setPrefix(prefix, ns)設置命名空間前綴生成 <ns:tag>

五、 進階:動態數據驅動生成


public void writeBooks(List books, OutputStream out) throws Exception {
    XmlSerializer serializer = XmlPullParserFactory.newInstance().newSerializer();
    serializer.setOutput(out, "UTF-8");
    serializer.startDocument("UTF-8", true);
    serializer.startTag(null, "books");
    for (Book b : books) {
        serializer.startTag(null, "book");
        serializer.attribute(null, "id", b.getId());
        writeSimpleTag(serializer, "name", b.getName());
        writeSimpleTag(serializer, "author", b.getAuthor());
        writeSimpleTag(serializer, "price", b.getPrice());
        serializer.endTag(null, "book");
    }
    serializer.endTag(null, "books");
    serializer.endDocument();
}

private void writeSimpleTag(XmlSerializer s, String tag, String value) throws IOException {
    s.startTag(null, tag);
    s.text(value);
    s.endTag(null, tag);
}

六、 與 DOM/JAXB 對比

特性XmlSerializer (XPP)DOM (W3C)JAXB
依賴體積~100KB (xpp3)JDK 內置~1MB (jaxb-impl)
內存模式流式寫入,不佔內存全量樹,佔內存大對象樹,佔內存中等
編程風格事件驅動/流式樹操作註解映射/對象綁定
適用場景大文件生成、Android、嵌入式小文件、需隨機訪問修改對象序列化、配置文件、WebService

XmlSerializer 以極小的體積、流式寫入特性,成為生成大型 XML 文件、Android 開發、資源受限環境的首選方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved