精彩专题推荐:建站之入门课 建站之必修课 建站之关键课 网站价值所在 流量提高专题 css+div 标准 个人网站打造全过程
返回建站学首页
导航:
建站首页 | 网站设计 | 网站开发 | 网站运营 | 网页软件 | 建站指南 | 搜索优化 | 图像处理 | 视频教程 | 书籍教程 | 建站专题
当前位置:首页>网站开发>xml教程>正文

将XML结点转换成JAVABEAN并存入数据库


来源:网络 时间:07-07-04 点击: 点击这里收藏本文

关于问题b

XML树:JDOM, dom4j等都可以直接找到父子关系

BEAN体系:

I.原子属性。我们限定一个BEAN中所有有业务意义的原子字段的类型都STRING,所有String类型的字段都是业务字段

II.单个子结点。我们让所有有业务意义的非原子字段都实现一个共同的接口BusiNode,这样一个BEAN中所有BusiNode成员都是这个BEAN的子结点

III.类集子结点。我们也可以限定所有且只有类集子结点可以使用List或Set类型,这样可以利用过滤出所有类集子结点。然而,在JAVA1.4及以前的版本里,程序并不知道过滤出的类集子结点是哪个Class的实例(因为没有泛型),也就没办法实例化一个类集子结点(见后文),因此只能手动注册类集子结点的属性名和Class。JAVA1.5以上的版本我没用过,不知道可不可以解决这个问题。

数据库表关系: 这就不用多说了,就是通过外键参考。因此每类结点对应的表中,都必须有个外键,以参考它的父结点;还必须有个主键,以供它的子结点参考。各表的外键名必须相同并为一常数,否则程序生成INSERT SQL时才可以不用理会具体表的具体的外键名。

程序在解析时,遍历的是BEAN树;在持久化时也是。比起XML树,BEAN树代表真正的业务结构;比起数据库表关系树,BEAN树才能由父至子地进行先序遍历

4.其他问题

a.要让程序知道,原子属性中哪些是XML结点的属性,哪些是XML结点的原子ELEMENT。代码中这是两个抽象方法,必须让具体的结点类实现

b.回顾本文概述部分提到的“pig --content --pighead 的三级关系,无端端多了一个content结点”,因此我们要让程序知道,pighead,pigfoot等结点的子结点,究竟是pig,还是pig下的content。处理不规范XML时要注意这个问题。这也是一个抽象方法,必须让具体的结点类实现

c.与上一条类似但更变态的,是类集结点的不规范问题。假设一个pig有多个pighead,那结构可能为 pig--pighead,pighead,...,也可能为pig--pigheads--content,content.... 必须让程序知道某个具体结点用的是哪种模式

5.代码

核心:多态 + 递归

a.接口BusiNode

 

						import java.util.*;

import org.dom4j.Element;

/**
 * 每个结点都要实现的接口
 * 它提供了一些方法以方便实现递归的XML解析和持久化
 *
 */
public interface BusiNode {
    
    /**
     * 所有类型为不可分类型的属性
     * @return 属性名的集合
     */
    public List getAtomicPropNames();
    
    /**
     * 一些成员变量。这些成员变量是XML结点的属性
     * @return
     */
    public List getXmlAttributes();
    
    /**
     * 一些成员变量。这些成员变量是XML结点的子元素,并且类型为不可分的
     * @return
     */
    public List getXmlAtomicElements();
    
    
    /**
     * 所有类型为类集的属性,并且这些类集中每个元素的类型都是BusiNode
     * @return  key = 属性名, value = 属性类的Class对象。
     * 如果为空不返回NULL,而是空的MAP
     */
    public Map getCollectionPropsMap();
    

    /**
     * 所有类型为BusiNode的属性
     * @return 属性名的集合
     */
    public List getBusiNodePropNames();
    
    
    /**
     * 从XML中解析出来。
     * @param element
     * @return
     */
    public void parseFromXML(Element element);    
    }

b.默认的实现

9 7 3 1 2 3 4 8 :

  把此文章收藏到:          
广而告之
文章搜索
  • Google JZxue.Com

关于我们 | 联系我们 | 友情链接 | 网站地图
Copyright © 2005 - 2006 建站学 All rights reserved.