4.2.2010:支持缩进,支持cdata
1.fix xml属性不能保存为基本数据类型的bug
2.实现了指定属性的注入
XML:
<root>
<WordType id="1" name="type1"/>
<WordType id="2" name="type2"/>
<Word name="w1" type.id="1" d="0.1"/>
<Word name="w2" type.id="2" d="0.2"/>
<Word name="w3" type.id="1" d="0.3"/>
</root>
Java:
x.open(this.getClass().getClassLoader().getResource("subObject.xml").getFile());
List<List<Object>> result = x.getObjects(new Object[]{new WordType(),new Word()});
以上代码得到的结构为:
List result:
List<WordType> r0 = result.get(0);
1 = r0.get(0).getId();
2 = r0.get(1).getId();
List<Word> r1 = result.get(1);
w1 = r1.get(0).getName();
1 = r1.get(0).getWordType.getId();
w2 = r1.get(1).getName();
2 = r1.get(1). getWordType.getId();
w3 = r1.get(2).getName();
1 = r1.get(2). getWordType.getId();
同理以上结构保存后得到这样的文档:
<root>
<WordType id="1" name="type1"/>
<WordType id="2" name="type2"/>
<Word d="0.1" name="w1" type.id="1"/>
<Word d="0.2" name="w2" type.id="2"/>
<Word d="0.3" name="w3" type.id="1"/>
</root>
========================以上4.23.2009更新===========================
增加新功能: 可以将某个属性保存为CDATA
使用该功能,需要定义一下CDATA的字段
XMLUtil util = new XMLUtil();
try{
util.setFieldNameOfCDATA("content");
util.create("Wiki","wiki.xml");
util.add(word);
util.save();
}finally{
util.close();
}
CDATA filed在一个element只能有一个,所以只定义一次.
为什么不用
@CDATA,考虑良久,还是觉得annotation不能保持pojo的纯洁性.
@CDATA让这个remark过的obj成为XMLUtil的专属对象,就像被hibernate remark过一样.
在遍地SOA应用的现在,pojo copy到其他地方,其他工程就必须要去掉这些anno.
Jomper认为pojo应该是纯洁的,不应该被anno,interface污染.至少XMLUtil不愿意这样做.
如果需要pojo有更多的功能,应该用其他办法包装它.
Jomper写过一个
ChangeSummary{
Str id,datetime,user,comment;
Object pojo;
}
这样就能避免入侵,也许
Datagraph也可以这样的.
========================以上11.12.2008更新===========================
增加了两个新接口:
update(Object o,String primaryKeyName)
List<Object> getObjectByKey(Object obj,String primaryKeyName)
下面是UT:
@Before
public void setUp() throws Exception {
Word w = new Word();
w.setId("12321dsad");
w.setContent("scsdc");
Word w1 = new Word();
w1.setId("12321dsadas11");
w1.setContent("scsdc21s");
XMLUtil util = new XMLUtil();
try{
util.create("Wiki","test.xml");
util.add(w);
util.add(w1);
util.save();
}finally{
util.close();
}
}
@After
public void tearDown() throws Exception {
File f = new File("test.xml");
f.delete();
}
@Test
public void update() throws Exception{
Word w1 = new Word();
w1.setId("12321dsadas11");
w1.setContent("benben");
XMLUtil util = new XMLUtil();
try{
util.open("test.xml");
util.update(w1, "id");
util.save();
assertEquals(w1.getContent(),((Word)util.getObject(new Word(), "//Word[@id='"+w1.getId()+"']").get(0)).getContent());
}finally{
util.close();
}
}
@Test
public void search() throws Exception {
XMLUtil util = new XMLUtil();
try {
util.open("test.xml");
assertEquals("scsdc21s",((Word)util.getObject(new Word(), "//Word[contains(@content,'c21')]").get(0)).getContent());
} finally{
util.close();
}
}
@Test
public void searchByKey() throws Exception {
XMLUtil util = new XMLUtil();
Word w = new Word();
w.setId("12321dsadas11");
try {
util.open("test.xml");
assertEquals("scsdc21s",((Word)util.getObjectByKey(w, "id").get(0)).getContent());
} finally{
util.close();
}
}
=============================以上11.8.2008更新=================================
对以前写的一个XMLUtil做了一次重构
简单的小工具JomperXMLOperator
希望大家提出意见
写这个东西的目的就是
1.封装完全按照w3c规范的dom去处理xml.
2.xml 2 bean,bean 2 xml,数据绑定.
3.以后处理xml不用引入其他的包,一个类就行了。
4.方法更加的友好.
5.支持无数级深层次迭代,可以遍历对象的属性,和属性下的属性.
6.如果属性有范型将注入新对象,自动装载遍历到的数据。
看testcase应该就能全明白.
jdk 5,6测试通过.
可能还会有bug,因为testcase写的还很片面,只是每个功能写了一个,但这是远远不够的。
public class TestXMLUtil {
private Words words;
private WordsType type,type1,type2;
@Before
public void setUp() throws Exception {
type = new WordsType();
type.setName("person name");
type1 = new WordsType();
type1.setName("Greek letters");
type2 = new WordsType();
type2.setName("test");
List<WordsType> types = new ArrayList<WordsType> ();
types.add(type);
types.add(type1);
types.add(type2);
words = new Words();
words.setName("upslion");
words.setType(types);
words.setContent("alalalala");
}
@After
public void tearDown() throws Exception {
}
@Test
public void testAdd() throws Exception{
XMLUtil util = new XMLUtil();
util.create("XML");
util.add(words);
util.save("xml/aa.xml");
util.close();
}
@Test
public void testDelete() throws Exception{
XMLUtil util = new XMLUtil();
util.open("xml/aa.xml");
util.delete("//WordsType[@name='Greek letters']");
util.save();
assertEquals(0,util.findNodes("//WordsType[@name='Greek letters']").size());
util.close();
}
@Test
public void testFindNodes() throws Exception{
XMLUtil util = new XMLUtil();
util.open("xml/aa.xml");
assertEquals(2,util.findNodes("//WordsType").size());
util.close();
}
@Test
public void testFindNodesValue() throws Exception{
XMLUtil util = new XMLUtil();
util.open("xml/aa.xml");
assertEquals("person name", util.findNodesValue("//WordsType[@name='person name']/@name").get(0));
util.close();
}
@Test
public void testUpdateString() throws Exception{
XMLUtil util = new XMLUtil();
util.open("xml/aa.xml");
util.update("//WordsType[@name='test']/@name", "tested");
util.save();
assertEquals("tested", util.findNodesValue("//WordsType[@name='tested']/@name").get(0));
util.close();
}
@Test
public void testGetObjects() throws Exception{
XMLUtil util = new XMLUtil();
util.open("xml/aa.xml");
List<Object> os = util.getObjects(new Words());
assertEquals("tested",((Words)os.get(0)).getType().get(1).getName());
util.close();
}
}
分享到:
相关推荐
xml2bean
Java操作XML工具类XmlUtil详解 Java操作XML工具类XmlUtil是Java中一个非常重要的工具类,它提供了许多实用的方法来操作XML文件。在本文中,我们将详细介绍XmlUtil的使用方法和实现原理,希望能够为大家提供有价值的...
- 在编程中,XMLUtil通常指的是一个工具类或库,用于处理XML文档,如解析、验证、创建、修改等操作。 - 这个工具可能包含了XML的读取、写入、查找特定节点、转换成JSON等功能。 - 在Java中,例如,我们可以使用...
Flex网上书店 运行时 的 XMLUtil.class
XMLUtil 是一个基于Java的XML对象关系映射(ORM)工具包,它的主要目标是简化XML数据与Java对象之间的交互。ORM技术的核心理念是通过映射机制将数据库中的数据自动转化为对象,反之亦然,而XMLUtil则是在XML文档与...
XMLUtil.java,,这就是一小串代码,是一个配置文件,放在Java程序里面。
整理了几个在DotNet2.0中C#开发常用的基础工具类,内容如下:StringUtil、ParseUtil、TypeUtil、ByteUtil、NumUtil、XmlUtil、RegexUtil、HashUtil、ColorUtil。
XmlUtils JS操作XML工具类 ** * 加载xml文件,参数: * @param {string} xmlPath:加载的xml文件路径; * @return {Object} true 正常加载; false 加载失败 *
这个XMLUtil工具类包含了解析XML文件、获取根元素、读取属性值、遍历子元素以及使用XPath查找元素等常用操作。你可以根据实际需求扩展此工具类,添加更多的功能,例如创建新的XML文档、修改现有元素等。 使用这个...
XmlUtil工具类简化了XML的读写操作,可以方便地解析XML文档,获取节点信息。例如,获取XML文件的根节点: ```java Element root = XmlUtil.getRootElement(new File("xml文件路径")); ``` 综上所述,Hutool作为...
1. xmlUtil工具类 package com.example.xmlpaserutil.util; import java.io.InputStream; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1....
9. **模块化设计**:工具类可以按照功能划分为多个小的工具类,如`IOUtil`、`XMLUtil`等,以保持代码的整洁和清晰。 10. **测试**:与所有软件组件一样,工具类也需要进行充分的单元测试,确保其功能的正确性和健壮...
微信JSAPI工具包
工作中经常使用的Java工具类分享,做Java开发用得上。
本教程将深入探讨Java如何处理XML文件,以"XmlUtil.zip"中的"XmlUtil.java"为例,讲解相关的Java XML处理技术。 首先,Java提供了DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API ...