ホームページ  >  記事  >  バックエンド開発  >  XMLBeans を使用して XML を簡単に読み書きできる

XMLBeans を使用して XML を簡単に読み書きできる

黄舟
黄舟オリジナル
2017-03-01 17:05:101892ブラウズ

1. XML 解析について

XML は Java アプリケーションでますます重要になってきており、データの保存と交換で広く使用されています。たとえば、一般的な設定ファイルはすべて XML で保存されます。 as Service と Web Services はデータ交換として機能します。そのため、XML ドキュメントを正しく読み書きすることが XML アプリケーションの基礎となります。 XML の読み取りと書き込みは簡単な作業ではありません

2. XMLBean の概要

Hibernate などのオブジェクト/リレーショナル データベース マッピング ツールが登場する前は、Hibernate は Java 環境で人気のあるオブジェクト/リレーショナル データベース マッピング ツールになりました。データベースの操作は JDBC を通じて実装されます。オブジェクト/リレーショナル データベース マッピング ツールの出現後は、開発者が自分で SQL ステートメントを作成する必要があり、データベースでの操作は JavaBeans での操作に変換され、非常に容易になりました。そこで、XML の読み書きを JavaBean 操作に変換できる同様のツールがあれば、XML の読み書きが簡単になり、XML に詳しくない開発者でも簡単に XML を読み書きできるようになります。 XMLBean.

3. XMLBean と XML ドキュメントを準備します

XMLBean は、http://www.apache.org からダウンロードできます。解凍されたディレクトリは次のとおりです。

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

さらに、XML ドキュメント (customers.xml) も準備する必要があります。

この記事の例では、このドキュメントの読み取りと書き込みを行います。ドキュメントのソース コードは次のとおりです。

<?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>

これは、顧客データ モデルでは、各顧客には顧客番号 (ID)、名前、性別 (gender)、電話番号 (phoneNumber)、および住所があり、そのうちの 2 つのアドレス (主アドレス (PrimaryAddress) と請求先住所 (BillingAddress)) があり、各アドレスには郵便番号、住所 1、住所 2 から構成されます。請求先住所には受信者 (受信者) も含まれます。また、この設定ファイル (ファイル名 customer.xsdconfig) を準備する必要があります。

<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. XMLBean を使用する手順

Java 環境で他のオブジェクト/リレーショナル データベース マッピング ツールを使用する手順と同様に、XMLBean を正式に使用する前に、2 つの準備を行う必要があります。 1. XML スキーマ ファイルを生成します

XML スキーマ ファイルとは通常、各 XML ファイルには、XML ファイルの構造と要素、および制約を定義する XML 制約ファイルがあります。要素と構造について簡単に言うと、XML ファイルがデータベース内のレコードであるとすると、スキーマはなぜ XML の構造と制約を知る必要があるのでしょうか。このスキーマ ファイルを使用して、XMLBean は XML 操作を実装するための一連の関連する Java クラスを生成します。開発者は、XMLBean によって生成された Java クラスを使用して、SAX や DOM を使用せずに XML 操作を完了します。このスキーマ ファイルを生成する方法 XML に精通している開発者は、XML に精通していない開発者でも、XMLSPY や Stylus Studio などの有名なツールを使用してスキーマ ファイルを作成できます。 XML ファイルを通じてスキーマ ファイルを生成します。参加して、このスキーマ ファイル (customer.xsd) を生成しました:

  <?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>

2. scomp を使用して Java クラスを生成します

Scomp は、bin ディレクトリにある XMLBean によって提供されるコンパイル ツールです。このツールを使用すると、上記のスキーマ ファイルを生成できます。 Java Classes.scomp の構文は次のとおりです。 -

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

主なパラメータの説明:

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

config.xsdconfig -- xsdconfig ファイルの場所 このファイルは主に使用されます。この記事では、生成された Java クラスのファイル名ルールとパッケージ名を定式化します。この記事では、パッケージはsample.xmlbeanです

この記事では、次のように実行しました:

 scomp -src build\src  -out build\customerXmlBean.jar schema\customer.xsd
             -compiler C:\jdk142_04\bin\javac customer.xsdconfig

このコマンドラインは、scompにcustomerXmlBeanを生成するように指示することを意味します。 .jar を作成し、build ディレクトリに置きます。同時に、ソース コードが生成され、buildsrc の下に配置されます。ファイルは customer.xsd で、xsdconfig ファイルは実際には、生成された Java ソース コードです。必要なのは、jar ファイルです。まず、buildsrcsamplexmlbean で生成されたクラスを見てみましょう。これで準備作業はすべて完了しました。jar を使用します。 XML を読み書きするために生成されたファイルです

5. XMLBean を使用して XML ファイルを読み取ります

新しい Java プロジェクトを作成し、XMLBean2.0.0lib の下にある Jar ファイルを、先ほど生成した customerXmlBean.jar と結合します。 ClassPath.

新しい Java クラスを作成します: CustomerXMLBean。 ソース コードは次のとおりです:

CustomersDocument.java -- 整个XML文档的Java Class映射
  CustomerType.java -- 节点sustomer的映射
  AddressType.java -- 节点address的映射
  BillingAddressType.java -- 节点billingAddress的映射
  PrimaryAddressType.java -- 节点primaryAddress的映射

実行して出力結果を確認します:

 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();
    }
    }

XMLBean の威力は非常に簡単です。 XMLBean を使用して XML ファイルを作成します

XMLBean を使用して XML ドキュメントを作成することも簡単です

Java クラスを見てください:

  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

main メソッドを変更します。 opens 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. XMLBean を使用して XML ファイルを変更します

別のメソッドを追加します:

   public static void main(String[] args) {
    String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml";
        CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);
        customerXMLBean.createCustomer();
    }

実行後、顧客番号 3 の顧客の姓が姓に変更されたことがわかります

8. XMLBean を使用して顧客

を削除し、別のメソッドを追加します:

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)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。