Rumah pembangunan bahagian belakang Tutorial XML/RSS xml解析工具包 Xstream的示例代码详解

xml解析工具包 Xstream的示例代码详解

Mar 08, 2017 pm 04:29 PM

特点

  1. 简化的API; 

  2. 无映射文件; 

  3. 高性能,低内存占用; 

  4. 整洁的XML; 

  5. 不需要修改对象,支持内部私有字段;

  6. 不需要setter/getter方法,final字段;

  7. 提供序列化接口; 

  8. 自定义转换类型策略; 

  9. 详细的错误诊断; 

Xstream常用注解

@XStreamAlias("message") 别名注解,作用目标:类,字段

@XStreamImplicit 隐式集合  

@XStreamImplicit(itemFieldName="part")  作用目标:集合字段  

@XStreamConverter(SingleValueCalendarConverter.class) 注入转换器,作用目标: 对象  

@XStreamAsAttribute 转换成属性,作用目标:字段  

@XStreamOmitField 忽略字段,作用目标:字段  

示例

1. 解析XML工具类

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;

/**
 * 输出xml和解析xml的工具类
 */
public class XmlUtil {
    private static final Logger logger = LoggerFactory.
            getLogger(XmlUtil.class);

    /**
     * java 转换成xml
     * @param obj 对象实例
     * @return String xml字符串
     * @Title: toXml
     * @Description: TODO
     */
    public static String toXml(Object obj) {
        //XStream xstream=new XStream(); //默认使用xpp解析器
        //指定编码解析器
        XStream xstream = new XStream(new DomDriver("utf-8"));
        //启用注解识别
        xstream.processAnnotations(obj.getClass());
        return xstream.toXML(obj);
    }

    /**
     * 将传入xml文本转换成Java对象
     * @param xmlStr
     * @param cls xml对应的class类
     * @return T  xml对应的class类的实例对象
     */
    public static <T> T toBean(String xmlStr, Class<T> cls) {
        XStream xstream = new XStream();
        xstream.processAnnotations(cls);
        T obj = (T) xstream.fromXML(xmlStr);
        return obj;
    }

    /**
     * 写到xml文件中去
     * @param obj      对象
     * @param absPath  绝对路径
     * @param fileName 文件名
     */
    public static boolean toXMLFile(Object obj, String absPath, String fileName) {
        String strXml = toXml(obj);
        String filePath = absPath + fileName;
        File file = new File(filePath);
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                logger.error("file creation failed, cause is {}", e);
                return false;
            }
        }
        OutputStream ous = null;
        try {
            ous = new FileOutputStream(file);
            ous.write(strXml.getBytes());
            ous.flush();
        } catch (Exception e1) {
            logger.error("file write failed, cause is {}", e1);
            return false;
        } finally {
            if (ous != null)
                try {
                    ous.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
        return true;
    }

    /**
     * 从xml文件读取报文
     * @param absPath  绝对路径
     * @param fileName 文件名
     * @param cls
     */
    public static <T> T toBeanFromFile(String absPath, String fileName, Class<T> cls) throws Exception {
        String filePath = absPath + fileName;
        InputStream ins = null;
        try {
            ins = new FileInputStream(new File(filePath));
        } catch (Exception e) {
            throw new Exception("read {" + filePath + "} file failed!", e);
        }
        XStream xstream = new XStream();
        xstream.processAnnotations(cls);
        T obj = null;
        try {
            obj = (T) xstream.fromXML(ins);
        } catch (Exception e) {
            throw new Exception("parse {" + filePath + "} file failed!", e);
        }
        if (ins != null)
            ins.close();
        return obj;
    }
}
Salin selepas log masuk

2. 编写Teacher类

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import java.util.List;

@XStreamAlias(value = "teacher")
public class Teacher {
    @XStreamAsAttribute
    private String name;
    @XStreamAsAttribute
    private String phone;
    @XStreamAsAttribute
    private int age;
    @XStreamImplicit(itemFieldName = "student")
    private List<Student> students;

    public Teacher() {
    }

    public Teacher(String name, String phone, int age, List<Student> students) {
        this.name = name;
        this.phone = phone;
        this.age = age;
        this.students = students;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List<Student> getStudents() {
        return students;
    }

    public void setStudents(List<Student> students) {
        this.students = students;
    }
}
Salin selepas log masuk

3. 编写Student类

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias(value = "student")
public class Student {
    @XStreamAsAttribute
    private String name;
    @XStreamAsAttribute
    private int age;
    @XStreamAsAttribute
    private String address;

    public Student() {
    }

    public Student(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
Salin selepas log masuk

4. Test测试类

import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        Student student1 = new Student("Aaron", 24, "广州");
        Student student2 = new Student("Abel", 23, "北京");
        List<Student> students = new ArrayList<>();
        students.add(student1);
        students.add(student2);
        Teacher teacher = new Teacher("Dave", "020-123456", 46, students);
        String xml = XmlUtil.toXml(teacher);
        System.out.println(xml);
    }
}
Salin selepas log masuk

5. 运行结果

<teacher name="Dave" phone="020-123456" age="46">
  <student name="Aaron" age="24" address="广州"/>
  <student name="Abel" age="23" address="北京"/>
</teacher>
Salin selepas log masuk


Atas ialah kandungan terperinci xml解析工具包 Xstream的示例代码详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bolehkah saya membuka fail XML menggunakan PowerPoint? Bolehkah saya membuka fail XML menggunakan PowerPoint? Feb 19, 2024 pm 09:06 PM

Bolehkah fail XML dibuka dengan PPT? XML, Extensible Markup Language (Extensible Markup Language), ialah bahasa markup universal yang digunakan secara meluas dalam pertukaran data dan penyimpanan data. Berbanding dengan HTML, XML lebih fleksibel dan boleh menentukan tag dan struktur datanya sendiri, menjadikan penyimpanan dan pertukaran data lebih mudah dan bersatu. PPT, atau PowerPoint, ialah perisian yang dibangunkan oleh Microsoft untuk membuat pembentangan. Ia menyediakan cara yang komprehensif untuk

Menapis dan menyusun data XML menggunakan Python Menapis dan menyusun data XML menggunakan Python Aug 07, 2023 pm 04:17 PM

Melaksanakan penapisan dan pengisihan data XML menggunakan Python Pengenalan: XML ialah format pertukaran data yang biasa digunakan yang menyimpan data dalam bentuk teg dan atribut. Apabila memproses data XML, kami selalunya perlu menapis dan mengisih data. Python menyediakan banyak alat dan perpustakaan yang berguna untuk memproses data XML. Artikel ini akan memperkenalkan cara menggunakan Python untuk menapis dan mengisih data XML. Membaca fail XML Sebelum kita mula, kita perlu membaca fail XML. Python mempunyai banyak perpustakaan pemprosesan XML,

Tukar data XML kepada format CSV dalam Python Tukar data XML kepada format CSV dalam Python Aug 11, 2023 pm 07:41 PM

Tukar data XML dalam Python kepada format CSV XML (ExtensibleMarkupLanguage) ialah bahasa penanda boleh diperluas yang biasa digunakan untuk penyimpanan dan penghantaran data. CSV (CommaSeparatedValues) ialah format fail teks dipisahkan koma yang biasa digunakan untuk import dan eksport data. Semasa memproses data, kadangkala data XML perlu ditukar kepada format CSV untuk analisis dan pemprosesan yang mudah. Python adalah yang kuat

Menggunakan Python untuk menggabungkan dan menyahduplikasi data XML Menggunakan Python untuk menggabungkan dan menyahduplikasi data XML Aug 07, 2023 am 11:33 AM

Menggunakan Python untuk menggabungkan dan menyahduplikasi data XML XML (eXtensibleMarkupLanguage) ialah bahasa penanda yang digunakan untuk menyimpan dan menghantar data. Apabila memproses data XML, kadangkala kita perlu menggabungkan berbilang fail XML menjadi satu, atau mengalih keluar data pendua. Artikel ini akan memperkenalkan cara menggunakan Python untuk melaksanakan penggabungan dan penyahduplikasian data XML, dan memberikan contoh kod yang sepadan. 1. Penggabungan data XML Apabila kita mempunyai berbilang fail XML, kita perlu menggabungkannya

Python melaksanakan penukaran antara XML dan JSON Python melaksanakan penukaran antara XML dan JSON Aug 07, 2023 pm 07:10 PM

Python melaksanakan penukaran antara XML dan JSON Pengenalan: Dalam proses pembangunan harian, kita selalunya perlu menukar data antara format yang berbeza. XML dan JSON ialah format pertukaran data biasa Dalam Python, kita boleh menggunakan pelbagai perpustakaan untuk menukar antara XML dan JSON. Artikel ini akan memperkenalkan beberapa kaedah yang biasa digunakan, dengan contoh kod. 1. Untuk menukar XML kepada JSON dalam Python, kita boleh menggunakan modul xml.etree.ElementTree

Mengendalikan ralat dan pengecualian dalam XML menggunakan Python Mengendalikan ralat dan pengecualian dalam XML menggunakan Python Aug 08, 2023 pm 12:25 PM

Mengendalikan Ralat dan Pengecualian dalam XML Menggunakan Python XML ialah format data yang biasa digunakan untuk menyimpan dan mewakili data berstruktur. Apabila kami menggunakan Python untuk memproses XML, kadangkala kami mungkin menghadapi beberapa ralat dan pengecualian. Dalam artikel ini, saya akan memperkenalkan cara menggunakan Python untuk mengendalikan ralat dan pengecualian dalam XML, dan menyediakan beberapa kod sampel untuk rujukan. Gunakan pernyataan cuba-kecuali untuk menangkap ralat penghuraian XML Apabila kami menggunakan Python untuk menghuraikan XML, kadangkala kami mungkin menghadapi beberapa

Import data XML ke dalam pangkalan data menggunakan PHP Import data XML ke dalam pangkalan data menggunakan PHP Aug 07, 2023 am 09:58 AM

Mengimport data XML ke dalam pangkalan data menggunakan PHP Pengenalan: Semasa pembangunan, kita sering perlu mengimport data luaran ke dalam pangkalan data untuk pemprosesan dan analisis selanjutnya. Sebagai format pertukaran data yang biasa digunakan, XML sering digunakan untuk menyimpan dan menghantar data berstruktur. Artikel ini akan memperkenalkan cara menggunakan PHP untuk mengimport data XML ke dalam pangkalan data. Langkah 1: Menghuraikan fail XML Mula-mula, kita perlu menghuraikan fail XML dan mengekstrak data yang diperlukan. PHP menyediakan beberapa cara untuk menghuraikan XML, yang paling biasa digunakan ialah menggunakan Mudah

Gunakan PHP dan XML untuk memproses dan memaparkan geolokasi dan data peta Gunakan PHP dan XML untuk memproses dan memaparkan geolokasi dan data peta Aug 01, 2023 am 08:37 AM

Memproses dan memaparkan data geolokasi dan peta menggunakan PHP dan Gambaran Keseluruhan XML: Memproses dan memaparkan data geolokasi dan peta adalah keperluan biasa semasa membangunkan aplikasi web. PHP ialah bahasa pengaturcaraan sebelah pelayan yang popular yang boleh berinteraksi dengan data dalam format XML. Artikel ini menerangkan cara menggunakan PHP dan XML untuk memproses dan memaparkan data geolokasi dan peta serta menyediakan beberapa kod sampel. 1. Penyediaan: Sebelum memulakan, anda perlu memastikan bahawa PHP dan sambungan yang berkaitan, seperti Simple, dipasang pada pelayan

See all articles