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]*
-src [dir] -- 生成的Java Classes存放目录 -srconly -- 不编译Java Classes,不产生Jar文件 -out [jarFileName] -- 生成的Jar文件,缺省是xmltypes.jar -compiler -- Java编译器的路径,即Javac的位置 schemaFile.xsd -- XML Schema文件位置
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的映射
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
Ä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(); } }
public static void main(String[] args) { String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml"; CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename); customerXMLBean.createCustomer(); }
<?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)!