分享
 
 
 

JOX(关于Java处理xml文档的讨论)

王朝java/jsp·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

JOX是一套用户XML document.和Java beans之间进行数据传递的JAVA类库。

一个简单直接的JOX实例:

JOX是非常的简单易用。假设你现在已经有了下面的Java Bean。

package com.wutka.jox.test;

import com.wutka.jox.*;

import java.util.*;

public class TestBean implements java.io.Serializable

{

protected int foo;

protected String bar;

protected java.util.Date baz;

protected Vector thingies;

protected TestSubbean subbean;

public TestBean()

{

bar = "";

baz = new Date();

thingies = new Vector();

}

public int getFoo() { return foo; }

public void setFoo(int aFoo) { foo = aFoo; }

public String getBar() { return bar; }

public void setBar(String aBar) { bar = aBar; }

public java.util.Date getBaz() { return baz; }

public void setBaz(java.util.Date aBaz) { baz = aBaz; }

public TestSubbean getSub() { return subbean; }

public void setSub(TestSubbean aSub) { subbean = aSub; }

public String[] getThingies()

{

String[] retThingies = new String[thingies.size()];

if (thingies.size() 0) thingies.copyInto(retThingies);

return retThingies;

}

public void setThingies(String[] newThingies)

{

thingies = new Vector(newThingies.length);

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

{

thingies.addElement(newThingies[i]);

}

}

public String getThingies(int i)

{

return (String) thingies.elementAt(i);

}

public void setThingies(int i, String thingy)

{

thingies.setElementAt(thingy, i);

}

public String toString()

{

StringBuffer ret = new StringBuffer(

"foo="+foo+";bar="+bar+";baz="+baz.toString()+

";thingies=");

for (int i=0; i < thingies.size(); i++)

{

if (i 0) ret.append(",");

ret.append((String) thingies.elementAt(i));

}

ret.append(";sub=");

ret.append(subbean.toString());

return ret.toString();

}

}

并且你已创建了下面的 XML 文件:

<?xml version="1.0"?

<MarkTest

<thingiesMoe</thingies

<thingiesLarry</thingies

<thingiesCurly</thingies

<thingiesShemp</thingies

<thingiesCurly Joe</thingies

<foo5</foo

<baz6/25/00 12:46 AM</baz

<barThis is the bar value</bar

<sub

<age35</age

<nameMark</name

</sub

</MarkTest

下面的程序将读出XML并把数据存储于TestBean:

package com.wutka.jox.test;

import com.wutka.jox.*;

import java.io.*;

public class TestDeser

{

public static void main(String[] args)

{

try

{

FileInputStream in = new FileInputStream("bean.xml");

JOXBeanInputStream joxIn = new JOXBeanInputStream(in);

TestBean testBean = (TestBean) joxIn.readObject(

TestBean.class);

System.out.println(testBean);

}

catch (Exception exc)

{

exc.printStackTrace();

}

}

}

你现在能作的就是创建FileInputStream或者FileReader去读取XML文件,并且把它打包进JOXBeanInputStream或者JOXBeanReader。接着你就可以让JOX读这个对象和该对象的类。

写一个输出XML文件的BEAN就这么简单啦^_^:

package com.wutka.jox.test;

import com.wutka.jox.*;

import java.io.*;

public class TestSer

{

public static void main(String[] args)

{

try

{

TestBean b = new TestBean();

b.setFoo(5);

b.setBar("This is the bar value");

b.setThingies(new String[] {

"Moe", "Larry", "Curly", "Shemp", "Curly Joe" });

TestSubbean sub = new TestSubbean();

sub.setName("Mark");

sub.setAge(35);

b.setSub(sub);

FileOutputStream fileOut = new FileOutputStream("bean.xml");

JOXBeanOutputStream joxOut = new JOXBeanOutputStream(fileOut);

joxOut.writeObject("MarkTest", b);

joxOut.close();

}

catch (Exception exc)

{

exc.printStackTrace();

}

}

}

你必须在这个Java Bean中设置一些值,创建一个用于写XML文件的输出流,用JOXBeanOutputStream或者JOXBeanWriter规定这个输出流,并写相应的对象。以后,你就不必重复做这些工作啦^_^。只要你有了DTD,JOX就可以根据这个DTD识别根标签了。

为了后面的例子,我假定你已经创建了下面的DTD文件了:

<?xml version="1.0" encoding="ISO-8859-1"?

<!ELEMENT MarkTest (Thingies*, foo?, BAR?, baz? S-U-B?)

<!ELEMENT Thingies #PCDATA

<!ELEMENT foo #PCDATA

<!ELEMENT BAR #PCDATA

<!ELEMENT baz #PCDATA

<!ELEMENT S-U-B (age)

<!ELEMENT age #PCDATA

<!ATTLIST S-U-B name CDATA ""

下面的程序可以读取DTD文件并且传递给JOX,使JOX可以规范输出啦^_^:

package com.wutka.jox.test;

import com.wutka.jox.*;

import com.wutka.jox.dtd.*;

import java.io.*;

public class TestSerDTD

{

public static void main(String[] args)

{

try

{

TestBean b = new TestBean();

b.setFoo(5);

b.setBar("This is the bar value");

b.setThingies(new String[] {

"Moe", "Larry", "Curly", "Shemp", "Curly Joe" });

TestSubbean sub = new TestSubbean();

sub.setName("Mark");

sub.setAge(35);

b.setSub(sub);

FileOutputStream fileOut = new FileOutputStream("bean.xml");

FileReader reader = new FileReader("testbean.dtd");

Parser dtdParser = new Parser();

DTD dtd = dtdParser.parse(reader);

reader.close();

JOXBeanOutputStream joxOut = new JOXBeanOutputStream(dtd, fileOut);

joxOut.writeObject("MarkTest", b);

joxOut.close();

}

catch (Exception exc)

{

exc.printStackTrace();

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有