zoukankan      html  css  js  c++  java
  • Java 操作 XML(11)--XMLBeans 使用

    XMLBeans 是一个 XML-Java 绑定工具,它可以很方便地解析 XML 及生成 XML。本文主要介绍 XMLBeans 的基本使用,文中所使用到的软件版本:Java 1.8.0_181、XMLBeans 4.0.0。

    1、XMLBeans简介

    XMLBeans 是Apache的一个开源项目主要实现将java对象和XML绑定的功能,类似 JAXB;官网地址:http://xmlbeans.apache.org/index.html。

    使用 XMLBeans 处理XML大概有如下几个步骤:

    a、xml 文件转换成 xsd 文件
    b、使用XMLBeans的scomp命令生成对应的jar
    c、把生成的jar导入classpath,解析或生成XML

    2、XMLBeans使用

    2.1、XML样例文件(sutdent.xml)

    <?xml version="1.0" encoding="utf-8" ?>
    <school:grade xmlns:school="http://www.w3.org/TR/html4/school/">
        <school:student rollno="1" age="11">
            <school:firstname>cxx1</school:firstname>
            <school:lastname>Bob1</school:lastname>
            <school:nickname>stars1</school:nickname>
            <school:marks>85</school:marks>
        </school:student>
        <school:student rollno="2" age="12">
            <school:firstname>cxx2</school:firstname>
            <school:lastname>Bob2</school:lastname>
            <school:nickname>stars2</school:nickname>
            <school:marks>85</school:marks>
        </school:student>
        <school:student rollno="3" age="13">
            <school:firstname>cxx3</school:firstname>
            <school:lastname>Bob3</school:lastname>
            <school:nickname>stars3</school:nickname>
            <school:marks>85</school:marks>
        </school:student>
    </school:grade>

    2.2、XML转XSD(sutdent.xsd)

    XML转XSD可以使用XMLSpy等工具来处理,这里使用在在线的转换工具来处理(https://www.freeformatter.com/xsd-generator.html),转换后的xsd如下:

    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/TR/html4/school/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="grade">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="student" maxOccurs="unbounded" minOccurs="0">
              <xs:complexType>
                <xs:sequence>
                  <xs:element type="xs:string" name="firstname"/>
                  <xs:element type="xs:string" name="lastname"/>
                  <xs:element type="xs:string" name="nickname"/>
                  <xs:element type="xs:byte" name="marks"/>
                </xs:sequence>
                <xs:attribute type="xs:byte" name="rollno" use="optional"/>
                <xs:attribute type="xs:byte" name="age" use="optional"/>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>

    2.3、xsdconfig配置文件(student.xsdconfig)

    xsd配置文件(后缀为.xsdconfig)主要用来制定生成的Java Class的一些文件名规则和Package的名称:

    <xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">
      <xb:namespace>
        <xb:package>com.abc.demo.general.xml</xb:package>
      </xb:namespace>
    </xb:config>

    xsd文件中如果有命名空间,生成的包名是根据命名空间来的;xsdconfig配置不起作用。

    2.4、使用XMLBeans的scomp命令生成jar包

    C:UserswuyyDownloadsxmlbeans-4.0.0inscomp -out student.jar -compiler D:softJavajdk1.8.0_181injavac student.xsd student.xsdconfig

     参数说明:

    -src [dir]            -- 生成的Java源文件存放目录 
    -srconly              -- 只生成Java源文件
    -out [jarFileName]    -- 生成的Jar文件,缺省是xmltypes.jar 
    -compiler             -- Java编译器的路径,即Javac的位置 
    schemaFile.xsd        -- XML Schema文件位置 
    config.xsdconfig      -- xsdconfig文件的位置

    2.5、使用XMLBeans解析或生成XML

    把生成的student.jar导入classpath,使用XMLBeans生成的中间类来解析或生成XML。

    package com.abc.demo.general.xml;
    
    import org.junit.Test;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.w3.tr.html4.school.GradeDocument;
    
    import java.util.List;
    
    /**
     * XMLBeans使用
     */
    public class XMLBeansCase {
        private static Logger logger = LoggerFactory.getLogger(XMLBeansCase.class);
    
        /**
         * java对象转成xml
         * @throws Exception
         */
        @Test
        public void javaToXml() throws Exception {
            GradeDocument document = GradeDocument.Factory.newInstance();
            GradeDocument.Grade grade = document.addNewGrade();
            GradeDocument.Grade.Student student1 = grade.addNewStudent();
            student1.setRollno((byte) 1);
            student1.setAge((byte) 10);
            student1.setFirstname("cxx1");
            student1.setLastname("Bob1");
            student1.setNickname("stars1");
            student1.setMarks((byte) 85);
    
            GradeDocument.Grade.Student student2 = grade.addNewStudent();
            student2.setRollno((byte) 2);
            student2.setAge((byte) 11);
            student2.setFirstname("cxx2");
            student2.setLastname("Bob2");
            student2.setNickname("stars2");
            student2.setMarks((byte) 85);
    
            GradeDocument.Grade.Student student3 = grade.addNewStudent();
            student3.setRollno((byte) 3);
            student3.setAge((byte) 12);
            student3.setFirstname("cxx3");
            student3.setLastname("Bob3");
            student3.setNickname("stars3");
            student3.setMarks((byte) 85);
    
            document.save(System.out);
        }
    
        /**
         * xml转成java对象
         * @throws Exception
         */
        @Test
        public void xmlToJava() throws Exception {
            GradeDocument document = GradeDocument.Factory.parse(WoodstoxCase.class.getResourceAsStream("student3.xml"));
            GradeDocument.Grade grade = document.getGrade();
            List<GradeDocument.Grade.Student> students = grade.getStudentList();
            for (GradeDocument.Grade.Student student : students) {
                logger.info(student.getRollno() + "|" + student.getAge() + "|" + student.getFirstname() + "|" + student.getLastname() + "|" + student.getNickname());
            }
        }
    }
  • 相关阅读:
    mongo 索引
    nginx gzip配置
    vim 命令
    Mongo小结
    阿里云ECS服务器连接MongoDB
    python 解析Excel
    Django之数据库--ORM
    sql语句
    关于Django的序列化问题。serializers
    MongoEngine模块
  • 原文地址:https://www.cnblogs.com/wuyongyin/p/14429239.html
Copyright © 2011-2022 走看看