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