WEB开发网      婵犵數濮烽弫鍛婄箾閳ь剚绻涙担鍐叉搐绾剧懓鈹戦悩瀹犲闁汇倗鍋撻妵鍕箛閸洘顎嶉梺绋款儑閸犳劙濡甸崟顖氬唨闁靛ě浣插亾閹烘鈷掗柛鏇ㄥ亜椤忣參鏌″畝瀣暠閾伙絽銆掑鐓庣仭缁楁垿姊绘担绛嬪殭婵﹫绠撻、姘愁樄婵犫偓娴g硶鏀介柣妯款嚋瀹搞儱螖閻樺弶鍟炵紒鍌氱Ч瀹曟粏顦寸痪鎯с偢瀵爼宕煎☉妯侯瀳缂備焦顨嗗畝鎼佸蓟閻旈鏆嬮柣妤€鐗嗗▓妤呮⒑鐠団€虫灀闁哄懐濮撮悾鐤亹閹烘繃鏅濋梺闈涚墕濡瑩顢欒箛鏃傜瘈闁汇垽娼ф禒锕傛煕閵娿儳鍩f鐐村姍楠炴﹢顢欓懖鈺嬬幢闂備浇顫夊畷妯肩矓椤旇¥浜归柟鐑樻尭娴滃綊姊虹紒妯虹仸闁挎洍鏅涜灋闁告洦鍨遍埛鎴︽煙閼测晛浠滃┑鈥炽偢閹鈽夐幒鎾寸彇缂備緡鍠栭鍛搭敇閸忕厧绶炴俊顖滅帛濞呭洭姊绘担鐟邦嚋缂佽鍊垮缁樼節閸ャ劍娅囬梺绋挎湰缁嬫捇宕㈤悽鍛婄厽閹兼番鍨婚埊鏇㈡煥濮樿埖鐓熼煫鍥ュ劤缁嬭崵绱掔紒妯肩畺缂佺粯绻堝畷姗€濡歌缁辨繈姊绘担绛嬪殐闁搞劋鍗冲畷顖炲级閹寸姵娈鹃梺缁樻⒒閳峰牓寮崒鐐寸厱闁抽敮鍋撻柡鍛懅濡叉劕螣鐞涒剝鏂€闂佺粯鍔曞Ο濠囧吹閻斿皝鏀芥い鏃囨閸斻倝鎽堕悙鐑樼厱闁哄洢鍔屾晶顖炴煕濞嗗繒绠婚柡灞界Ч瀹曨偊宕熼鈧▍锝囩磽娴f彃浜炬繝銏f硾椤戝洨绮绘ィ鍐╃厵閻庢稒岣跨粻姗€鏌ㄥ☉妯夹fい銊e劦閹瑩顢旈崟顓濈礄闂備浇顕栭崰鏍礊婵犲倻鏆﹂柟顖炲亰濡茶鈹戦埄鍐ㄧ祷妞ゎ厾鍏樺璇测槈閵忕姈鈺呮煏婢跺牆鍔撮柛鏂款槺缁辨挻鎷呯粙搴撳亾閸濄儳鐭撶憸鐗堝笒閺嬩線鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓 ---闂傚倸鍊搁崐鐑芥倿閿旈敮鍋撶粭娑樺幘濞差亜鐓涢柛娑卞幘椤斿棝姊虹捄銊ユ珢闁瑰嚖鎷�
开发学院WEB开发Jsp 使用XMLBeans 处理XML 阅读

使用XMLBeans 处理XML

 2008-01-05 18:45:59 来源:WEB开发网 闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁撻悩鎻掔€梺姹囧灩閻忔艾鐣烽弻銉︾厵闁规鍠栭。濂告煕鎼达紕校闁靛洤瀚伴獮鎺楀箣濠靛啫浜鹃柣銏⑶圭壕濠氭煙閻愵剚鐏辨俊鎻掔墛缁绘盯宕卞Δ鍐冣剝绻涘畝濠佺敖缂佽鲸鎹囧畷鎺戭潩閹典焦鐎搁梻浣烘嚀閸ゆ牠骞忛敓锟�婵犵數濮烽弫鍛婃叏椤撱垹绠柛鎰靛枛瀹告繃銇勯幘瀵哥畼闁硅娲熷缁樼瑹閳ь剙岣胯鐓ら柕鍫濇偪濞差亜惟闁宠桨鑳堕崝锕€顪冮妶鍡楃瑐闁煎啿鐖奸崺濠囧即閵忥紕鍘梺鎼炲劗閺呮稒绂掕缁辨帗娼忛埡浣锋闂佽桨鐒﹂幑鍥极閹剧粯鏅搁柨鐕傛嫹闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷  闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶銆冮崨鏉戠厺鐎广儱顦崡鎶芥煏韫囨洖校闁诲寒鍓熷铏圭磼濡搫顫岄梺鍦拡閸嬪棝鎯€椤忓浂妯勯梺鍝勬湰濞叉ḿ鎹㈠┑濠勭杸闁哄洨濮烽悰銉╂⒒娴e搫甯跺鐟帮攻缁傚秴饪伴崼姘e亾閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡涱€楀褜鍠栭湁闁绘ɑ鐟ョ€氼喚绮绘ィ鍐╃厱妞ゆ劑鍊曢弸搴ㄦ煟韫囧鍔滈柕鍥у瀵潙螣閸濆嫬袝婵$偑鍊戦崹娲偡閳哄懎绠栭柍鈺佸暞閸庣喖鏌曢崶褍绨婚柟鍑ゆ嫹
核心提示:一.xmlBeans 基于XML开发的技术很多,常见的如Dom4j(JBoss用),Castor,Common-Degister(Struts用),XMLBeans.关于这些的比较网上很多.这里谈谈XMLBeans的用法.XMLBeans的官方地址(http://xmlbeans.apache.org/).上面有它的具

一.xmlBeans

基于XML开发的技术很多,常见的如Dom4j(JBoss用),Castor,Common-Degister(Struts用),XMLBeans.关于这些的比较网上很多.这里谈谈XMLBeans的用法.

XMLBeans的官方地址(http://xmlbeans.apache.org/).上面有它的具体介绍和用法.

 

二 适用的场合

从使用的经验来看,XMLBeans比较适合处理具有复杂Schema定义的xml,如SAML,Liberty等.而简单的XML结构用Dom4j或者Castor XML Mapping 都很轻易处理.

因此假如你要处理一个很复杂的Schema定义,选择XMLbeans就比较好.

 

三. XMLBeans 的使用过程

1.要熟悉XML Schema. 这本书值得推荐: XML 模式权威教程 http://www.china-pub.com/computers/common/info.asp?id=8908)

 

2.从Schema 自动映射到 java 对象.

这个步骤可以用XMLbeans的生成工具.

相关的Maven脚本如下:

     <!--==================================================================-->

<!-- XMLBeans                             -->

<!--==================================================================-->

<goal description="xmlbeans generate " name="PRoject:xmlbeans-gen" >

<echo>+---------------------------------------------------+</echo>

<echo> XMLBeans genreating.......            </echo>

<echo>+---------------------------------------------------+</echo>

<taskdef name="xmlbean"

classname="org.apache.xmlbeans.impl.tool.XMLBean"

classpathref="maven.dependency.classpath"/>

<xmlbean srcgendir="${project.xmlbeans.srcgendir}"

classgendir="${project.xmlbeans.classgendir}"

destfile="${project.xmlbeans.destfile}" debug="true"

classpathref="maven.dependency.classpath" >

<fileset dir="${project.xmlbeans.schemas}" />

</xmlbean>

<!--

<path id="{maoxiang.xmlbeans.srcgendir" location="${maoxiang.xmlbeans.srcgendir}"/>

<maven:addPath id="maven.compile.src.set" refid="maoxiang.xmlbeans.srcgendir"/>

-->

</goal>

 

这个脚本调用XMLBeans的ant脚本(看xmlbeans文档),生成了一个可以处理Schema的框架.

 

3. 使用XMLBeans 解析 xml

根据Schema的生成框架,就可以处理符合该Schema定义的XML实例了.这点和Eclipse下的EMF框架十分类似.

XMLBeans框架的两个最重要的方法:

a) Factory 用来解析XML的,如 PortletAppType portletApp = PortletAppType.Factory.parse(file); 需要提醒的是,
  one: parse 的参数虽然可以是各种类型,不过最好是 Stream型. 假如直接是File型,在web环境下,会报错为 Content is not allowed  in prolog.

 two: 在Jboss下使用时,不需要使用jaxen这个包.
b) XmlText() 可以将对象的数据导出为xml格式,而且不一定是要根元素.

看看下面的代码片断:

  从 portlet.xml中读取启动参数.

    public static Properties getInitParamProps(PortletType portlet) {

Properties props = new Properties();

 

InitParamType[] inits = portlet.getInitParamArray();

 

for (int i = 0; i < inits.length; i++) {

props.setProperty(inits[i].getName().getStringValue(), inits[i]

.getValue().getStringValue());

}

return props;

}

 

 

4.总结

使用XMLBeans处理XML,简单.高效(可以看看xmlbeans架构师的blog:http://davidbau.com/).比较难的在于假如要处理简单的xml结构,你还得定义一个schema方便自动产生xmlbeans框架. 而Schema本身就是一种语言,建议采用 XML Spy(home edition 是免费的) 来编写Schema.

下面这个Schema就是我的Portal Layout的Schema,用XMLBeans来处理的效果很好.

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns:portal="http://maoxiang/portal" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://maoxiang/portal" elementFormDefault="unqualified">

<xsd:complexType name="baseType" abstract="true">

<xsd:sequence>

<xsd:element name="preference" type="portal:preferenceType" minOccurs="0" maxOccurs="unbounded">

<xsd:unique name="name-uniqueness">

<xsd:selector XPath="./preference"/>

<xsd:field xpath="name"/>

</xsd:unique>

</xsd:element>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name="preferenceType">

<xsd:sequence>

<xsd:element name="name" type="xsd:string"/>

<xsd:element name="value" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>

</xsd:sequence>

</xsd:complexType>

<!-- define the page layout -->

<xsd:element name="page" type="portal:pageType" />

<xsd:complexType name="pageType">

<xsd:complexContent>

<xsd:extension base="portal:baseType">

<xsd:sequence>

<xsd:element name="create-time" type="xsd:dateTime"/>

<xsd:element name="page-title" type="xsd:string"/>

<xsd:element name="page-width" type="xsd:string"/>

<xsd:element name="page-language" type="xsd:language"/>

<xsd:element name="page-refresh" type="xsd:integer"/>

<xsd:element name="page-style" type="portal:styleType"/>

<xsd:element name="page-layout" type="portal:layoutType"/>

</xsd:sequence>

</xsd:extension>

</xsd:complexContent>

</xsd:complexType>

<xsd:complexType name="styleType">

<xsd:complexContent>

<xsd:extension base="portal:baseType">

<xsd:sequence>

<xsd:element name="CSS" type="xsd:string"/>

</xsd:sequence>

</xsd:extension>

</xsd:complexContent>

</xsd:complexType>

<xsd:complexType name="layoutType">

<xsd:complexContent>

<xsd:extension base="portal:baseType">

<xsd:sequence>

<xsd:element name="row" type="portal:rowType" minOccurs="0" maxOccurs="unbounded">

<xsd:unique name="row_uuid">

<xsd:selector xpath="."/>

<xsd:field xpath="@id"/>

</xsd:unique>

</xsd:element>

</xsd:sequence>

</xsd:extension>

</xsd:complexContent>

</xsd:complexType>

<xsd:complexType name="rowType">

<xsd:complexContent>

<xsd:extension base="portal:baseType">

<xsd:sequence>

<xsd:element name="col" type="portal:colType" minOccurs="0" maxOccurs="unbounded">

<xsd:unique name="col_uuid">

<xsd:selector xpath="."/>

<xsd:field xpath="@id"/>

</xsd:unique>

</xsd:element>

</xsd:sequence>

<xsd:attribute name="id" type="xsd:string" use="required"/>

</xsd:extension>

</xsd:complexContent>

</xsd:complexType>

<xsd:complexType name="colType">

<xsd:complexContent>

<xsd:extension base="portal:baseType">

<xsd:sequence>

<xsd:element name="unit" type="portal:unitType" minOccurs="0" maxOccurs="unbounded">

<xsd:unique name="unit_uuid">

<xsd:selector xpath="."/>

<xsd:field xpath="@id"/>

</xsd:unique>

</xsd:element>

</xsd:sequence>

<xsd:attribute name="id" type="xsd:string" use="required"/>

<xsd:attribute name="width" type="xsd:string" use="required"/>

</xsd:extension>

</xsd:complexContent>

</xsd:complexType>

<xsd:complexType name="unitType">

<xsd:complexContent>

<xsd:extension base="portal:baseType">

<xsd:sequence>

<xsd:element name="portlet-id" type="xsd:string"/>

</xsd:sequence>

<xsd:attribute name="id" type="xsd:string" use="required"/>

</xsd:extension>

</xsd:complexContent>

</xsd:complexType>

</xsd:schema>

 

 

 


Tags:使用 XMLBeans 处理

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接