直接把自己抽离出来的代码贴上吧,方便以后查看。
首先从某处获取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;这个一定要记得判断哦
转载于:https://blog.51cto.com/alina64/1402922