直接把自己抽离出来的代码贴上吧,方便以后查看。
首先从某处获取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” 博客,谢绝转载!
原文:http://alina64.blog.51cto.com/2301465/1402922