<config>
<Property>
<Name>数据</Name>
<Level>0</Level>
<IsKey>0</IsKey>
<Key/>
<stdTableName>DB_MSSFJZ.T_MSSFJZDSRHZYSAR</stdTableName>
<stdFieldName>N_RDZXCJ</stdFieldName>
<stdType>INT</stdType>
<stdLength/>
<DefaultValue/>
<TranslateType/>
<TranslateCondition/>
<PreCondition/>
</Property>
</config>
节选了xml的一段,需求:修改“人大_政协层级”的同级节点<stdType>将节点值由"INT"改为"Text".
root.element("stdType")方法:获取root节点下名为<stdType>的节点;
root.elementText("Name")方法:获取root节点下<Name>节点的文字;
package org.dom4j.io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
public class ChangeNodeData {
private static String path = "F:\\15xsd修改\\testxml";
public static void main(String[] args) {
Element element = null;
try {
File folder = new File(path);
//list()获取目录下所有文件
//list()获取目录下所有文件及目录的绝对路径
//使用增强for遍历目录下文件(批量处理xml文件)
for (File f : folder.listFiles()) {
System.out.println("获取文件:" + f);
//创建SAXReader,调用起read方法解析xml文件
SAXReader reader = new SAXReader();
//读取文件,获取document对象
Document document = reader.read(f);
//获取根节点
element = document.getRootElement();
System.out.println("根节点:" + element);
//根据xml节点路径查找节点
List l=document.selectNodes("/config/Property");//设置查找Property节点的xml路径
Iterator it=l.iterator();
while(it.hasNext()){
Element elm=(Element)it.next();
if(elm.elementText("Name").equals("数据")){//获取elm节点下的<Name>节点的内容与后面字符串比较。
elm.element("stdType").setText("Text");//给<stdType>节点内容设为Text
System.out.println(elm.elementText("stdType"));
}
}
try {
Writer osWrite = new OutputStreamWriter(
new FileOutputStream(f));//创建输出流
OutputFormat format = OutputFormat.createPrettyPrint(); //获取输出的指定格式
format.setEncoding("UTF-8");//设置编码 ,确保解析的xml为UTF-8格式
XMLWriter writer = new XMLWriter(osWrite, format);//XMLWriter 指定输出文件以及格式
writer.write(document);//把document写入xmlFile指定的文件(可以为被解析的文件或者新创建的文件)
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception ex) {
ex.printStackTrace();
System.out.println(ex.getMessage());
}
}
}
下面为结果(截取部分):
<Property>
<Name>数据</Name>
<Level>0</Level>
<IsKey>0</IsKey>
<Key/>
<stdTableName>DB_MSSFJZ.T_MSSFJZDSRHZYSAR</stdTableName>
<stdFieldName>N_RDZXCJ</stdFieldName>
<stdType>Text</stdType>
<stdLength/>
<DefaultValue/>
<TranslateType/>
<TranslateCondition/>
<PreCondition/>
</Property>