dom4j 根据xml节点路径查找节点,找到对应的目标节点下的子节点,对节点Text值进行修改

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Walter Sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值