动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.java事件的小总结.
.用MVC架构简单的注册、登录例子.
.Designing “query by criteria”.
.JAVA新手必备:Java基础之关键字.
.超级简单的sqlmap工具(ajf sql m.
.有关有效使用final关键字的准则.
.如何在Java中如何定义一个常量.
.用javamail显示复合邮件的内容的.
.Java应用:编写高级JavaScript应.
.使用Java连接处于proxy(or防火墙.
.爪哇语言单态创立性模式介绍(下).
.Java中的模式(1).
.如何加载并显示较大的图形文件?.
.EJB设计模式(1).
.动态图文结合.
.Java从入门到精通之书籍篇.
.用DataGrid浏览数据相关实例.
.从零开始到您如何成为EJB专家.
.实例讲解:Java中的SOAP技术应用.
.Java游戏开发案例-方块游戏.

使用XMLBeans 处理XML

发表日期:2008-1-5 |


一.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>

 

 

 


上一篇:JDO之前世今生 人气:410
下一篇:学习日期、日期格式、日期的解析和日期的计算[代码] 人气:549
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号