随笔-35  评论-97  文章-0  trackbacks-0

使用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

只有注册用户登录后才能发表评论。


网站导航: