dom4j读写xml文件


直接把自己抽离出来的代码贴上吧,方便以后查看。

首先从某处获取xml,用Document保存。暂时起名为a.xml吧。a.xml格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<cactus>
    <being>
        <item>
            <name>ECON</name>
        </item>
        <files>
            <field>
                <id>2</id>
                <name>aaaa</name>
                <type>ASCII_STRING</type>
                <values>FEEEF=EEE</values>
            </field>
        </files>
    </being>
</cactus>

这里省略了从id等于1~2300个field节点。主要取id为801~815的值,总结规律,可知第一页时801、802中<value>不带“=”,从第二页起也会带“=”。

  在这里814:上一页

        815:下一页

econ第一页

1#econ第二页

2#econ第三页

以此类推

若不存在下一页,则81中<value>为空。

读取a.xml,1)获取801~813的值,判断是否有“=”,无:不操作;有:则与b.xml中的值进行对比,若已存在不操作,若不存在则将该值插入b.xml.

  2)获取815的值,判断是否为空,否则修改请求代码,如当用户在客户点击2#econ时,触发新的事件时,新的请求代码为2#econ。

 b.xml格式如下:


<?xml version="1.0" encoding="utf-8"?>
<codeConfig> 
  <!--1#-->
  <item>
    <code>JDDD=III</code>
  </item>
  <item>
    <code>JDDDI=EEEI</code>
  </item>
</codeConfig>

下面是实现过程中抽取出的一个公共类,代码如下:


import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.transform.TransformerConfigurationException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
 * xml文件相关操作
 *
 * @author Alina 添加时间:2014-4-24
 *
 */
public class XmlOperate
{
    QSConsumer _mainApp;
    public XmlOperate()
    {
                                                                                                                                                                                                                                                             
    }
    public XmlOperate(QSConsumer mainApp)
    {
        _mainApp = mainApp;
    }
    /**
     * 读取xml文件,返回Document对象
     *
     * @author Alina 添加时间:2014-4-24
     *
     */
    public Document readXML(String fileName) throws DocumentException {
        SAXReader reader = new SAXReader();
        File file = new File(fileName);
        Document doc = reader.read(file);
        //System.out.println(doc.asXML());
        return doc;
    }
    /**
     * 遍历xml
     *
     * @author Alina 添加时间:2014-4-24
     *
     */
    public List<String> traverseXML(Document doc) {
        Element root = doc.getRootElement();
        String strCode = null;
        List list_name = doc.selectNodes("/codeConfig/item/code");
        List<String> list_CodeValue = new ArrayList<String>();
        Iterator it_codeValue = list_name.iterator();
        while (it_codeValue.hasNext()) {
            Element el = (Element) it_codeValue.next();
            list_CodeValue.add(el.getTextTrim());
        }
        return list_CodeValue;
    }
    /**
     * 遍历XML
     * @author Alina
     * 添加时间:2014-4-24 Alina
     *
     */
    public void xml_Traverse(Document doc) throws DocumentException
    { 
                // 读取类型代码
                List list_fieldValue = doc.selectNodes("/cactus/being/files/field");
                                                                                                                                                                                                                                                                                     
                Iterator it_value = list_fieldValue.iterator();
                                                                                                                                                                                                                                                                     
                while (it_value.hasNext())
                {
                    Element el = (Element) it_value.next();
                    Element mem_id = el.element("id");
                                                                                                                                                                                                                                                                         
                    String id = mem_id.getText();
                                                                                                                                                                                                                                                                     
//                  取id从801----815
                    switch(id)
                    {
                     case "801":
                     case "802":                          
                     case "803":
                     case "804":                          
                     case "805":
                     case "806":
                     case "807":
                     case "808":
                     case "809":
                     case "810":
                     case "811":
                     case "812":
                     case "813":                       
                        Element mem_value = el.element("values");
                        if(mem_value!=null)
                        {
                            String str_value=mem_value.getTextTrim();
                             if(str_value.contains("="))
                             {//判断requestCode.xml中是否已经包括该请求代码
                                System.out.println(_mainApp._listCodeValue);
                                Boolean b= _mainApp._listCodeValue.contains(str_value);           
                                if(!b)//不包括,则向requestCode.xml插入该值,并更新_listCodeValue列表
                                {
                                                                                                                                                                                                                                                                                         
                                    _mainApp._listCodeValue.add(str_value);
                                    //向requestCode.xml插入该值
                                    try {
                                        String filePath = "config/RutersConfig/requestCode.xml";
                                        insertNewNode(str_value,filePath);
                                        doc2XmlFile(doc,filePath);                            
                                    } catch (TransformerConfigurationException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                }
                             }
                             else
                             {
                                 System.out.println("该值为空啊");
                             }
                        }
                            break;
                     case "815":
                         Element mem_value2 = el.element("values");
                         if(mem_value2!=null)
                         {
                             String str_value2=mem_value2.getTextTrim();
                             if(!str_value2.isEmpty())
                             {
                                 _mainApp._strCommand=str_value2;//只此操作好像不够的吧
                                // _mainApp.itemRequests(_mainApp._strCommand);//??????????
                             }
                         }
                                                                                                                                                                                                                                                                              
                         break;
                        default:
                            break;                
                    }//end switch     
                                                                                                                                                                                                                                                              
    }//end while
    }
    /**
     * 向XML中添加新的节点
     * @author Alina
     * 添加时间:2014-4-24 Alina
     *
     */
    public static void insertNewNode(String str_value,String filePath) throws DocumentException, TransformerConfigurationException, IOException {
                                                                                                                                                                                                                                                             
        SAXReader reader = new SAXReader();
        File file = new File(filePath);
        Document doc = reader.read(file);
        // 用XPath查找对象
        List list = doc.selectNodes("/codeConfig");
        Iterator iter = list.iterator();
        if (iter.hasNext())
        {
            Element ele_root = (Element) iter.next();
            Element ele_item = ele_root.addElement("item");
            Element ele_code = ele_item.addElement("code");
            ele_code.setText(str_value);          
        }
                                                                                                                                                                                                                                                             
    }
    public static void doc2XmlFile(Document doc,String fileName) throws TransformerConfigurationException, IOException
    {
        XMLWriter writer = null;// 声明写XML的对象
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");// 设置XML文件的编码格式
        writer = new XMLWriter(new FileWriter(fileName), format);
        writer.write(doc);
        writer.close();
    }
}

其中

Element mem_value2 = el.element("values");

if(mem_value2!=null){}若该el节点不包括<values>子节点,则mem_value2返回null;这个一定要记得判断哦

本文出自 “Alina” 博客,谢绝转载!

你可能感兴趣的:(dom4j)