使用xml格式字符串转载数据和卸载数据,在数据传送时可以使用,避免直接对节点和属性等操作。
也可用来读取配置文件。
Root类:
Root是跟节点。结点名默认为"root",但是可以根据需要改变,使用setNodeName(String nodeName)。
put(String key, Object value)是添加属性值。
setValue(String value)是设定节点值。
parseXml(String xml)将xml字符串解析出Root对象。
toXml()将Root对象转为字符串。
addItem(Item item)为添加子节点。
Item类:
addItem(Item item)为添加子节点,可以嵌套。
parseElement(Element ele)为解析节点。
Element toElement()将Item对象转成元素。
其他的跟Root类差不多。
String toString()减Item转成字符串。
不多做解释了,看看源码就知道,很简单,虽不是很完善,但也可用用了。你可以再根据自己需要修改。
Root
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
/** *//**
* @author haoyu
*
*/
public class Root
{
private String nodeName = "root";
private String name;
private String description;
private Map<String, Object> attributes = new LinkedHashMap<String, Object>();
private List<Item> items;
public Root()
{
}
public Root(String nodeName)
{
if(StringUtils.isNotBlank(nodeName))
{
this.nodeName = nodeName;
}
}
public String getDescription()
{
return description;
}
public void setDescription(String description)
{
if(StringUtils.isNotBlank(description))
{
this.description = description;
}
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getNodeName()
{
return nodeName;
}
public void setNodeName(String nodeName)
{
this.nodeName = nodeName;
}
public void put(String key, Object value)
{
attributes.put(key, value);
}
public Object get(String key)
{
return attributes.get(key);
}
public Map<String, Object> getAttributes()
{
return attributes;
}
public void setAttributes(Map<String, Object> attributes)
{
this.attributes = attributes;
}
public List<Item> getItems()
{
return items;
}
public void addItem(Item item)
{
if(items == null)
{
items = new ArrayList<Item>();
}
items.add(item);
}
public String toXml()
{
Document doc = DocumentHelper.createDocument();
Element rootEle = doc.addElement(nodeName);
if(name != null)
{
rootEle.addAttribute("name", name);
}
if(description != null)
{
rootEle.addAttribute("description", description);
}
for(Iterator it = attributes.entrySet().iterator(); it.hasNext();)
{
Map.Entry entry = (Map.Entry)it.next();
if(entry == null || entry.getKey() == null || entry.getValue() == null
|| StringUtils.isBlank(String.valueOf(entry.getKey())))
{
continue;
}
rootEle.addAttribute(String.valueOf(entry.getKey()), String.valueOf(entry.getValue()));
}
if(CollectionUtils.isNotEmpty(items))
{
for(Iterator<Item> it = items.iterator(); it.hasNext();)
{
Item item = it.next();
rootEle.add(item.toElement());
}
}
return doc.asXML();
}
public String toString()
{
return toXml();
}
@SuppressWarnings("unchecked")
public void parseXml(String xml)
{
try
{
Document doc = DocumentHelper.parseText(xml);
Element rootEle = doc.getRootElement();
this.setNodeName(rootEle.getName());
this.setName(rootEle.attributeValue("name"));
this.setDescription(rootEle.attributeValue("description"));
for(Iterator it = attributes.entrySet().iterator(); it.hasNext();)
{
Map.Entry entry = (Map.Entry)it.next();
if(entry == null || entry.getKey() == null || entry.getValue() == null
|| StringUtils.isBlank(String.valueOf(entry.getKey())))
{
continue;
}
rootEle.addAttribute(String.valueOf(entry.getKey()), String.valueOf(entry.getValue()));
}
for(Iterator it = rootEle.attributeIterator(); it.hasNext();)
{
Attribute attr = (Attribute)it.next();
this.put(attr.getName(), attr.getText());
}
List<Element> items = rootEle.elements();
if(CollectionUtils.isNotEmpty(items))
{
for(Iterator<Element> it = items.iterator(); it.hasNext();)
{
Element recordEle = it.next();
Item item = new Item();
item.parseElement(recordEle);
this.addItem(item);
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public Document trun2Doc()
{
try
{
return DocumentHelper.parseText(this.toString());
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
}
Item
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Attribute;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
/** *//**
* @author haoyu
*
*/
public class Item
{
private String nodeName = "item";
private String value;
private Map<String, Object> attributes = new LinkedHashMap<String, Object>();
private List<Item> items;
public Item()
{
}
public Item(String nodeName)
{
if(StringUtils.isNotBlank(nodeName))
{
this.nodeName = nodeName;
}
}
public String getNodeName()
{
return nodeName;
}
public void setNodeName(String nodeName)
{
if(StringUtils.isNotBlank(nodeName))
{
this.nodeName = nodeName;
}
}
public void put(String key, Object value)
{
attributes.put(key, value);
}
public Object get(String key)
{
return attributes.get(key);
}
public Map<String, Object> getAttributes()
{
return attributes;
}
public void setAttributes(Map<String, Object> attributes)
{
this.attributes = attributes;
}
public String getValue()
{
return value;
}
public void setValue(String value)
{
this.value = value;
}
public List<Item> getItems()
{
return items;
}
public void addItem(Item item)
{
if(items == null)
{
items = new ArrayList<Item>();
}
items.add(item);
}
public void parseElement(Element ele)
{
this.nodeName = ele.getName();
for(Iterator it = ele.attributeIterator(); it.hasNext();)
{
Attribute attr = (Attribute)it.next();
this.put(attr.getName(), attr.getText());
}
if(StringUtils.isNotBlank(ele.getText()))
{
this.setValue(ele.getText());
}
List<Element> itemEles = ele.elements();
if(CollectionUtils.isNotEmpty(itemEles))
{
for(Iterator it = itemEles.iterator(); it.hasNext();)
{
Element itemEle = (Element)it.next();
Item item = new Item(itemEle.getName());
item.parseElement(itemEle);
this.addItem(item);
}
}
}
public Element toElement()
{
Element itemEle = DocumentHelper.createElement(nodeName);
for(Iterator it = attributes.entrySet().iterator(); it.hasNext();)
{
Map.Entry entry = (Map.Entry)it.next();
if(entry == null || entry.getKey() == null || entry.getValue() == null
|| StringUtils.isBlank(String.valueOf(entry.getKey())))
{
continue;
}
itemEle.addAttribute(String.valueOf(entry.getKey()), String.valueOf(entry.getValue()));
}
if(CollectionUtils.isNotEmpty(items))
{
for(Iterator it = items.iterator(); it.hasNext();)
{
Item item = (Item)it.next();
itemEle.add(item.toElement());
}
}
if(value != null)
{
itemEle.setText(value);
}
return itemEle;
}
public String toString()
{
StringBuffer sb = new StringBuffer();
sb.append("<").append(nodeName);
for(Iterator it = attributes.entrySet().iterator(); it.hasNext();)
{
Map.Entry entry = (Map.Entry)it.next();
sb.append(" ").append(entry.getKey()).append("=\"").append(entry.getValue()).append("\"");
}
if(value != null)
{
sb.append(">").append(value).append("</").append(nodeName).append(">");
}
else
{
sb.append("/>");
}
return sb.toString();
}
}
简单应用一下试试:
public static void main(String[] args)
{
Root bookmark = new Root();
bookmark.setNodeName("书签");
Item news = new Item();
news.setNodeName("类别");
news.put("描述", "新闻");
Item sina = new Item();
sina.setNodeName("网点");
sina.put("名称", "新浪");
sina.setValue("http://www.sina.com");
news.addItem(sina);
Item search = new Item();
search.setNodeName("网点");
search.setNodeName("类别");
news.put("描述", "搜索引擎");
Item google = new Item();
google.setNodeName("网点");
google.put("名称", "谷歌");
google.setValue("http://www.google.com");
Item baidu = new Item();
baidu.setNodeName("网点");
baidu.put("名称", "百度");
baidu.setValue("http://www.baidu.com");
search.addItem(google);
search.addItem(baidu);
bookmark.addItem(news);
bookmark.addItem(search);
System.out.println(bookmark.toString());
Root newBookmark = new Root();
newBookmark.parseXml(bookmark.toString());
System.out.println(newBookmark.toString());
}
结果输出:
<?xml version="1.0" encoding="UTF-8"?>
<书签><类别 描述="新闻"><网点 名称="新浪">http://www.sina.com</网点></类别><类别 描述="搜索引擎"><网点 名称="谷歌">http://www.google.com</网点><网点 名称="百度">http://www.baidu.com</网点></类别></书签>
<?xml version="1.0" encoding="UTF-8"?>
<书签><类别 描述="新闻"><网点 名称="新浪">http://www.sina.com</网点></类别><类别 描述="搜索引擎"><网点 名称="谷歌">http://www.google.com</网点><网点 名称="百度">http://www.baidu.com</网点></类别></书签>
posted on 2007-08-15 01:08
三告习习 阅读(1477)
评论(0) 编辑 收藏 所属分类:
java/jdk