您的位置:首页 > 其它

使用xmlbeans解析xml

2007-11-15 18:51 155 查看
1、准备工作
(1) 下载xmlbeans-2.3.0
解压后的目录结构如下:
xmlbeans-2.3.0
+----bin:常用的命令
+----docs
+----lib:使用xmlbeans必要的jar包
+----samples
+----schemas
(2) 配置环境变量
增加系统环境变量JAVA_HOME(D:/ProgramFile/Java/jdk1.5.0_07)XMLBEANS_HOME(D:/xmlbeans-2.3.0),并在path变量后增加D:/xmlbeans-2.3.0/bin和D:/ProgramFile/Java/jdk1.5.0_07/bin
2、准备XML Schema文件
XML Schema文件(后缀为.xsd)是一个XML的约束文件,它定义了XML文件的结构和元素以及对元素和结构的约束。XMLBean需要通过这个文件知道一个XML文件的结构以及约束,比如数据类型等。利用这个Schema文件,XMLBean将会产生一系列相关的Java Classes来实现对XML的操作。而作为开发人员,则是利用XMLBean产生的Java Classes来完成对XML的操作。
在本项目中,Schema文件由设计人员利用XMLSPY生成并提供给开发人员。
3、Xmlbeans生成jar和class文件
(1) 手写xsd配置文件
xsd配置文件(后缀为. xsdconfig)这个文件主要用来制定生成的Java Class的一些文件名规则和Package的名称。Xsdconfig文件的示例如下:

<xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">
<xb:namespace uri="http://www.cattsoft.com/ wscrm">
<xb:package>com.cattsoft. wscrm</xb:package>
</xb:namespace>
</xb:config>

写好改文件后将其保存为wscrm.xsdconfig,并将该文件和wsd文件一起放到schema文件夹中并放到xmlbeans的根目录下。
以后可以根据需要修改namespace和package。
注:namespace 后面跟着一个 url的attribute。 如果不加这个 attribute,同样也会生成xml bean文件,只不过生成的jar文件中会多一层xmlbean的package 。
(2) 手写运行脚本
Xmlbeans提供的一个编译工具(scomp命令),它在bin的目录下。通过这个工具,我们可以将Schema文件生成Java Classess。但是为了避免使用命令行窗口的麻烦,我们手写一个运行脚本(run.bat)如下所示:

set XMLBEANS_HOME=D:/xmlbeans-2.3.0
set XMLBEANS_LIB=D:/xmlbeans-2.3.0/lib
scomp -src build/src -out build/wscrm.jar schema/*.xsd -compiler D:/ProgramFile/bea/jdk142_05/bin/javac schema/wscrm.xsdconfig

该脚本的含义是:告诉scomp生成wscrm.jar,放在build目录下,同时生成源代码放在build/src下, Schema文件是schema文件夹下的所有.xsd,xsdconfig文件是[u]schema/wscrm.xsdconfig。[/u]文件
可以将该文件也放到bin目录下,以后如果生成同一个jar文件可以直接运行run.bat。如果生成一个新的jar需要根据生成jar包名称、xsd文件的位置、xsdconfig文件位置等修改该运行脚本。
附: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文件的位置。

(3) 运行脚本
运行run.bat其实, 在xmlbeans的根目录下会生成一个build目录,该目录中即保存了生成的Java源代码和jar包。实际上生成的Java源代码没有多大作用,我们要的是jar文件。对于其中的每个wsd文件在jar包中都会存在一个根节点(该XML文档的Java Class映射),该根节点名字为XXXDocument。每个XXXDocument中每个element
4、Java程序中读取/构造xml
(1) 将xmlbeans/lib下的包和生成的jar包加入到ProjectClassPath
(2) 写XML文件
步骤简要描述:
--XXXDocument.Factory.newInstance()得到XXXDocument的对象实例XXXDocument
--增加一个xs:complexType的节点用XXXDocument 的add方法,返回值类行为该复杂节点在xsd文件中定义的类型
--给一个复杂节点的简单类型属性赋值用该节点的set方法
--调用XXXDocument.toString()方法可以将该xml文件的按照字符串行式输出
示例如下:

[align=left]publicstatic String generateXML() throws IOException, XmlException{[/align]
[align=left] CustomersDocument doc=CustomersDocument.Factory.newInstance();[/align]
[align=left] CustomerType cust=doc.addNewCustomers().addNewCustomer();[/align]
[align=left] cust.setId(1000);[/align]
[align=left] cust.setGender("female");[/align]
[align=left] cust.setFirstname("Sophia");[/align]
[align=left] cust.setLastname("Lee");[/align]
[align=left] cust.setPhoneNumber("123456");[/align]
[align=left] [/align]
[align=left] AddressType address=cust.addNewAddress();[/align]
[align=left] PrimaryAddressType pAddress=address.addNewPrimaryAddress();[/align]
[align=left] pAddress.setPostalCode("100000");[/align]
[align=left] pAddress.setAddressLine1("ABC");[/align]
[align=left] pAddress.setAddressLine2("abc");[/align]
[align=left] BillingAddressType bAddress=address.addNewBillingAddress();[/align]
[align=left] bAddress.setAddressLine1("200000");[/align]
[align=left] bAddress.setAddressLine1("XYZ");[/align]
[align=left] bAddress.setAddressLine2("xyz");[/align]
[align=left] String xmlDoc=doc.toString();[/align]
[align=left] System.out.println("-------------------------------------");[/align]
[align=left] System.out.println(xmlDoc);[/align]
[align=left] System.out.println("--------------------------------------");[/align]
[align=left] return xmlDoc;[/align]
}

(3) 读XML文件
步骤简要描述:
--XXXDocument.Factory.parse(xmlDoc)将xml文件的字符串作为输入参数得到XXXDocument
--得到一个xs:complexType的节点用XXXDocument 的get方法,返回值类行为该复杂节点在xsd文件中定义的类型
--得到一个复杂节点的简单类型属性值用该节点的get方法
示例如下:

[align=left]publicstaticvoid readXML(String xmlDoc) throws XmlException, IOException{[/align]
[align=left] CustomersDocument doc=CustomersDocument.Factory.parse(xmlDoc);[/align]
[align=left] CustomerType[] custs=doc.getCustomers().getCustomerArray();[/align]
[align=left] for(int i=0;i<custs.length;i++){[/align]
[align=left] CustomerType cust=(CustomerType)custs[i];[/align]
[align=left] System.out.println("cust#"+i);[/align]
[align=left] System.out.println("custId:"+cust.getId());[/align]
[align=left] System.out.println("custGender:"+cust.getGender());[/align]
[align=left] System.out.println("custFirstName:"+cust.getFirstname());[/align]
[align=left] System.out.println("csutLastName:"+cust.getLastname());[/align]
[align=left] System.out.println("custPhoneNumber:"+cust.getPhoneNumber());[/align]
[align=left] [/align]
[align=left] AddressType address=cust.getAddress();[/align]
[align=left] PrimaryAddressType pAddress=address.getPrimaryAddress();[/align]
[align=left] System.out.println("PrimaryAddress:"+pAddress.getPostalCode()+"--"+pAddress.getAddressLine1()+"--"+pAddress.getAddressLine2());[/align]
[align=left] BillingAddressType bAddress=address.getBillingAddress();[/align]
[align=left] System.out.println("BillingAddress:"+bAddress.getPostalCode()+"--"+bAddress.getAddressLine1()+"--"+bAddress.getAddressLine2());[/align]
[align=left] [/align]
[align=left] System.out.println("cust#"+i);[/align]
[align=left] }[/align]
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: