Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden Sie XMLBean, um XML einfach zu lesen und zu schreiben

Verwenden Sie XMLBean, um XML einfach zu lesen und zu schreiben

黄舟
黄舟Original
2017-03-01 17:05:101919Durchsuche

1. Informationen zum XML-Parsing

XML wird in Java-Anwendungen immer wichtiger und wird häufig bei der Datenspeicherung und dem Datenaustausch verwendet Wird in Technologien wie Java Message Service und Web Services für den Datenaustausch verwendet. Daher ist das korrekte Lesen und Schreiben von XML-Dokumenten die Grundlage für XML-Anwendungen.

Java bietet zwei Methoden, SAX und DOM, zum Parsen von XML Trotzdem ist es keine leichte Aufgabe, ein etwas komplexes XML zu lesen und zu schreiben.

2. Einführung in XMLBean

Hibernate hat sich zu einer beliebten Objekt-/relationalen Datenbank für Java-Umgebungen entwickelt Vor dem Aufkommen von Objekt-/relationalen Datenbank-Mapping-Tools wie Hibernate mussten Entwickler für jede Operation in der Datenbank selbst SQL-Anweisungen schreiben. Die Operationen auf der Datenbank werden in Operationen auf JavaBeans umgewandelt, was die Datenbankentwicklung erheblich erleichtert. Wenn es daher ein ähnliches Tool gibt, das das Lesen und Schreiben von XML in Operationen auf JavaBeans umwandeln kann, wird es das Lesen und Schreiben von XML vereinfachen. Selbst Entwickler, die mit XML nicht vertraut sind, können XML problemlos lesen und schreiben.

3. XMLBean und XML-Dokumente vorbereiten

Herunterladen von http://www.apache.org , die neueste Version ist 2.0. Das entpackte Verzeichnis lautet wie folgt:

xmlbean2.0.0
     +---bin
     +---docs
     +---lib
     +---samples
     +---schemas

Zusätzlich müssen Sie ein XML-Dokument (customers.xml) vorbereiten,

Im Beispiel dieses Artikels , wir werden dieses Dokument lesen und schreiben:

<?xml version="1.0" encoding="UTF-8"?>
<Customers>
    <customer>
            <id>1</id>
            <gender>female</gender>
            <firstname>Jessica</firstname>
            <lastname>Lim</lastname>
            <phoneNumber>1234567</phoneNumber>
            <address>
                <PRimaryAddress>
                        <postalCode>350106</postalCode>
                        <addressLine1>#25-1</addressLine1>
                        <addressLine2>SHINSAYAMA 2-CHOME</addressLine2>
                </primaryAddress>
                <billingAddress>
                        <receiver>Ms Danielle</receiver>
                        <postalCode>350107</postalCode>
                        <addressLine1>#167</addressLine1>
                        <addressLine2>NORTH TOWER HARBOUR CITY</addressLine2>
                </billingAddress>
            </address>
    </customer>
    <customer>
            <id>2</id>
            <gender>male</gender>
            <firstname>David</firstname>
            <lastname>Bill</lastname>
            <phoneNumber>808182</phoneNumber>
            <address>
                <primaryAddress>
                        <postalCode>319087</postalCode>
                        <addressLine1>1033 WS St.</addressLine1>
                        <addressLine2>Tima Road</addressLine2>
                </primaryAddress>
                <billingAddress>
                        <receiver>Mr William</receiver>
                        <postalCode>672993</postalCode>
                        <addressLine1>1033 WS St.</addressLine1>
                        <addressLine2>Tima Road</addressLine2>
                </billingAddress>
            </address>
    </customer>
</Customers>

Dies ist ein Kundendatenmodell. Jeder Kunde hat eine Kundennummer (ID), einen Namen, ein Geschlecht (Geschlecht). Telefonnummer (phoneNumber) und Adresse, von denen es zwei Adressen gibt: Primäradresse (PrimaryAddress) und Rechnungsadresse (BillingAddress). Jede Adresse besteht aus Postleitzahl, Adresse 1 und Adresse 2. Die Rechnungsadresse ist auch der Empfänger (). Darüber hinaus muss eine Konfigurationsdatei (Dateiname customer.xsdconfig) erstellt werden. Auf die Funktion dieser Datei werde ich später noch eingehen:

<xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">
  <xb:namespace>
    <xb:package>sample.xmlbean</xb:package>
  </xb:namespace>
</xb:config>

4. Die Schritte für die Verwendung von XMLBean

sind die gleichen wie für die Verwendung anderer Objekt-/relationaler Datenbank-Mapping-Tools für die Java-Umgebung. Vor der offiziellen Verwendung von XMLBean müssen wir zwei Vorbereitungen treffen: 1. Generieren XML-Schemadatei

Was ist eine XML-Schemadatei? Normalerweise verfügt jede XML-Schemadatei über eine XML-Einschränkungsdatei, die die Struktur und die Elemente der XML-Datei definiert die Elemente und strukturellen Einschränkungen: Wenn eine XML-Datei ein Datensatz in einer Datenbank ist, dann ist Schema eine Tabellenstrukturdefinition.

Warum muss XMLBean die Struktur und Einschränkungen kennen? Über diese Datei können Sie eine XML-Datei erstellen, z. B. Datentypen usw. Mithilfe dieser Schemadatei generiert XMLBean eine Reihe verwandter Java-Klassen, um Vorgänge in XML zu implementieren. Als Entwickler verwenden Sie die von XMLBean generierten Java-Klassen, um Vorgänge abzuschließen XML ohne die Notwendigkeit von SAX oder DOM. Entwickler, die mit XML vertraut sind, können diese Schemadatei selbst schreiben. Entwickler, die mit XML nicht vertraut sind, können sie mit einigen Tools vervollständigen. Die bekanntesten sind XMLSPY und Stylus Studio. Fügen Sie hinzu, dass wir diese Schemadatei (customer.xsd) generiert haben:

2
  <?xml version="1.0" encoding="UTF-8"?>
       <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                  elementFormDefault="qualified">
         <xs:element name="Customers">
           <xs:complexType>
             <xs:sequence>
               <xs:element maxOccurs="unbounded" name="customer"
                           type="customerType"/>
             </xs:sequence>
           </xs:complexType>
         </xs:element>
       <xs:complexType name="customerType">
             <xs:sequence>
               <xs:element name="id" type="xs:int"/>
               <xs:element name="gender" type="xs:string"/>
               <xs:element name="firstname" type="xs:string"/>
               <xs:element name="lastname" type="xs:string"/>
               <xs:element name="phoneNumber" type="xs:string"/>
               <xs:element name="address" type="addressType"/>
             </xs:sequence>
       </xs:complexType>
         <xs:complexType name="addressType">
             <xs:sequence>
               <xs:element name="primaryAddress" type="primaryAddressType"/>
               <xs:element name="billingAddress" type="billingAddressType"/>
             </xs:sequence>
         </xs:complexType>
         <xs:complexType name="primaryAddressType">
             <xs:sequence>
               <xs:element name="postalCode" type="xs:string"/>
               <xs:element name="addressLine1" type="xs:string"/>
               <xs:element name="addressLine2" type="xs:string"/>
             </xs:sequence>
         </xs:complexType>
         <xs:complexType name="billingAddressType">
             <xs:sequence>
                   <xs:element name="receiver" type="xs:string"/>
               <xs:element name="postalCode" type="xs:string"/>
               <xs:element name="addressLine1" type="xs:string"/>
               <xs:element name="addressLine2" type="xs:string"/>
             </xs:sequence>
         </xs:complexType>
       </xs:schema>

scomp wird von XMLBean bereitgestellt. Ein Kompilierungstool, das sich im bin-Verzeichnis befindet. Mit diesem Tool können wir Java-Klassen aus der obigen Schemadatei generieren. Die Syntax von scomp lautet wie folgt: -

Hauptparameterbeschreibung:
  scomp [options] [dirs]* [schemaFile.xsd]* [service.wsdl]* [config.xsdconfig]*

config.xsdconfig – der Speicherort der xsdconfig-Datei. Diese Datei wird hauptsächlich zum Formulieren einiger Dateinamenregeln für die generierte Java-Klasse und des Namens verwendet Das Paket. In diesem Artikel habe ich es wie folgt ausgeführt:
-src [dir] -- 生成的Java Classes存放目录
  -srconly -- 不编译Java Classes,不产生Jar文件
  -out [jarFileName] -- 生成的Jar文件,缺省是xmltypes.jar
  -compiler -- Java编译器的路径,即Javac的位置
  schemaFile.xsd -- XML Schema文件位置

Diese Befehlszeile bedeutet, scomp anzuweisen, customerXmlBean.jar zu generieren und im Build-Verzeichnis abzulegen Gleichzeitig wird der Quellcode generiert und unter buildsrc abgelegt. Die Dateien xsd und xsdconfig sind tatsächlich von geringem Nutzen Werfen wir zunächst einen Blick auf die unter buildsrcsamplexmlbean generierten Klassen. Jetzt sind alle unsere Vorbereitungsarbeiten abgeschlossen: Kommen wir einfach zur Sache generiert, um XML zu lesen und zu schreiben.

5. Verwenden Sie XMLBean, um XML-Dateien zu lesen.
 scomp -src build\src  -out build\customerXmlBean.jar schema\customer.xsd
             -compiler C:\jdk142_04\bin\javac customer.xsdconfig

Erstellen Sie ein neues Java-Projekt, fügen Sie die Jar-Datei unter XMLBean2.0.0lib und die soeben generierte customerXmlBean.jar hinzu zum Klassenpfad des Projekts.

CustomersDocument.java -- 整个XML文档的Java Class映射
  CustomerType.java -- 节点sustomer的映射
  AddressType.java -- 节点address的映射
  BillingAddressType.java -- 节点billingAddress的映射
  PrimaryAddressType.java -- 节点primaryAddress的映射
Erstellen Sie eine neue Java-Klasse: CustomerXMLBean. Der Quellcode lautet wie folgt:

Führen Sie ihn aus und sehen Sie sich die Ausgabeergebnisse an:

Wie wäre es, ist es sehr einfach?

6. Verwenden Sie XMLBean, um XML-Dateien zu schreiben.
 package com.sample.reader;
    import java.io.File;
    
    import sample.xmlbean.*;
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.xmlbeans.XmlOptions;
    public class CustomerXMLBean {
    private String filename = null;
    
    public CustomerXMLBean(String filename) {
            super();
            this.filename = filename;
    }
    public void customerReader() {
            try {
              File xmlFile = new File(filename);
              CustomersDocument doc = CustomersDocument.Factory.parse(xmlFile);
              CustomerType[] customers = doc.getCustomers().getCustomerArray();
          
              for (int i = 0; i < customers.length; i++) {
                CustomerType customer = customers[i];
                println("Customer#" + i);
                println("Customer ID:" + customer.getId());
                println("First name:" + customer.getFirstname());
                println("Last name:" + customer.getLastname());
                println("Gender:" + customer.getGender());
                println("PhoneNumber:" + customer.getPhoneNumber());
                // Primary address
                PrimaryAddressType primaryAddress = customer.getAddress().getPrimaryAddress();
                println("PrimaryAddress:");
                println("PostalCode:" + primaryAddress.getPostalCode());
                println("AddressLine1:" + primaryAddress.getAddressLine1());
                println("AddressLine2:" + primaryAddress.getAddressLine2());
                // Billing address
                BillingAddressType billingAddress = customer.getAddress().getBillingAddress();
                println("BillingAddress:");
                println("Receiver:" + billingAddress.getReceiver());
                println("PostalCode:" + billingAddress.getPostalCode());
                println("AddressLine1:" + billingAddress.getAddressLine1());
                println("AddressLine2:" + billingAddress.getAddressLine2());
            
              }
            } catch (Exception ex) {
                    ex.printStackTrace();
            }
    }
    private void println(String str) {
          System.out.println(str);
    }
   public static void main(String[] args) {
      String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers.xml";
                   
     CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);
                   customerXMLBean.customerReader();
    }
    }

Die Verwendung von XMLBean zum Erstellen einer XML-Dokumentation ist ebenfalls ein Kinderspiel eine andere Methode,

  Customer#0
       Customer ID:1
       First name:Jessica
       Last name:Lim
       Gender:female
       PhoneNumber:1234567
       PrimaryAddress:
       PostalCode:350106
       AddressLine1:#25-1
       AddressLine2:SHINSAYAMA 2-CHOME
       BillingAddress:
       Receiver:Ms Danielle
       PostalCode:350107
       AddressLine1:#167
       AddressLine2:NORTH TOWER HARBOUR CITY
       Customer#1
       Customer ID:2
       First name:David
       Last name:Bill
       Gender:male
       PhoneNumber:808182
       PrimaryAddress:
       PostalCode:319087
       AddressLine1:1033 WS St.
       AddressLine2:Tima Road
       BillingAddress:
       Receiver:Mr William
       PostalCode:672993
       AddressLine1:1033 WS St.
       AddressLine2:Tima Road
Bitte schauen Sie sich die Java-Klasse an:

Ändern Sie die Hauptmethode

Führen Sie aus, öffnen Sie customer_new.xml:

 public void createCustomer() {
    try {
        // Create Document
        CustomersDocument doc = CustomersDocument.Factory.newInstance();
        // Add new customer
        CustomerType customer = doc.addNewCustomers().addNewCustomer();
        // set customer info
        customer.setId(3);
        customer.setFirstname("Jessica");
        customer.setLastname("Lim");
        customer.setGender("female");
        customer.setPhoneNumber("1234567");
        // Add new address
        AddressType address = customer.addNewAddress();
        // Add new PrimaryAddress
        PrimaryAddressType primaryAddress = address.addNewPrimaryAddress();
        primaryAddress.setPostalCode("350106");
        primaryAddress.setAddressLine1("#25-1");
        primaryAddress.setAddressLine2("SHINSAYAMA 2-CHOME");
        // Add new BillingAddress
        BillingAddressType billingAddress = address.addNewBillingAddress();
        billingAddress.setReceiver("Ms Danielle");
        billingAddress.setPostalCode("350107");
        billingAddress.setAddressLine1("#167");
        billingAddress.setAddressLine2("NORTH TOWER HARBOUR CITY");
        File xmlFile = new File(filename);
        doc.save(xmlFile);
        } catch (Exception ex) {
                ex.printStackTrace();
        }
  }
7. Verwenden Sie XMLBean, um die XML-Datei zu ändern

Wir fügen eine weitere Methode hinzu:
   public static void main(String[] args) {
    String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml";
        CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);
        customerXMLBean.createCustomer();
    }

Nach dem Ausführen sehen wir den Nachnamen des Kunden mit der Kundennummer 3 wurde in „letzte“ geändert.
 <?xml version="1.0" encoding="UTF-8"?>
    <Customers>
    <customer>
            <id>3</id>
            <gender>female</gender>
            <firstname>Jessica</firstname>
            <lastname>Lim</lastname>
            <phoneNumber>1234567</phoneNumber>
            <address>
                    <primaryAddress>
                         <postalCode>350106</postalCode>
                         <addressLine1>#25-1</addressLine1>
                                       <addressLine2>SHINSAYAMA 2-CHOME</addressLine2>
                    </primaryAddress>
                    <billingAddress>
                        <receiver>Ms Danielle</receiver>
                        <postalCode>350107</postalCode>
                       <addressLine1>#167</addressLine1>
                       <addressLine2>NORTH TOWER HARBOUR CITY</addressLine2>
                    </billingAddress>
                    </address>
            </customer>
    </Customers>

8. Verwenden Sie XMLBean, um einen Kunden zu löschen

und fügen Sie eine weitere Methode hinzu:

public void deleteCustomer(int id) {
     try {
      File xmlFile = new File(filename);
     CustomersDocument doc = CustomersDocument.Factory.parse(xmlFile);
    CustomerType[] customers = doc.getCustomers().getCustomerArray();
   for (int i = 0; i < customers.length; i++) {
        CustomerType customer = customers[i];
        if(customer.getId()==id){
                        customer.setNil() ;
                        break;
               }
   }
   doc.save(xmlFile);
   } catch (Exception ex) {
        ex.printStackTrace();
        }
   }
  main method:
    public static void main(String[] args) {
    String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml";
                    
    CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);
                    
    customerXMLBean.deleteCustomer(3);
    }

运行,我们将会看到客户编号为3的客户的资料已经被删除.

  九、查询XML

  除了本文在以上讲述的,利用XMLBean能轻轻松松完成XML的读写操作外,结合XPath和XQuery,XMLBean还能完成象SQL查询数据库一样方便地查询XML数据. 关于XML查询以及如何创建XML数据库, 我将在另一篇文章里讨论.

  十、结束语

  XMLBean能帮助我们轻易读写XML,这将有助于我们降低XML的学习和使用,有了这个基础,开发人员将为学习更多地XML相关技术和Web Services,JMS等其他J2EE技术打下良好地基础.

 以上就是利用XMLBean轻轻松松读写XML的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn