Java Dom4j 操作XML

1 篇文章 0 订阅
1 篇文章 0 订阅

经常使用的操作包括:
* 1,读取节点的值
* 2,新增节点:
*   2.1,添加子节点:根据子节点名称和内容添加;根据子节点xml添加
*   2.2,添加兄弟节点
*   2.3,为节点/hyman/user/username添加父节点/hyman/user/usermanage,那么原来的节点路径变为:/hyman/user/usermanage/username
* 3,删除节点
* 4,设置节点的值
*   4.1,设置叶子节点的值
*   4.2,设置非叶子结点(即存在子节点)的值
*     4.2.1,删除原来的子节点和子节点的子节点,设置文本值
*     4.2.2,删除原来的子节点和子节点的子节点,设置新的子节点
* 5,把xml文件转化为string输出
* 6,把string转化为xml输出

Dom4j操作XML主要有三大对象:Document,Node,Element。
可以利用SAXReader 从文件中创建Document,或者XMLHelper创建。
可以利用XMLWriter写xml文件。
三者关系:Document,Element –> Branch –> Node
具体可以查看api:http://www.oschina.net/uploads/doc/dom4j-1.6.1/index.html

需要引入的jar包:

<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>
<dependency>
    <groupId>jaxen</groupId>
    <artifactId>jaxen</artifactId>
    <version>1.1.6</version>
</dependency>

项目目录如下:

这里写图片描述

注意:操作实际影响的是target/classes目录下的xml文件,src目录下的xml文件不会受影响。

下面展示各种操作主要的代码:

1,获取文件的真实路径:

public static String getRealPath(String filePath){
    ClassLoader classLoader=Thread.currentThread().getContextClassLoader();
    URL url=classLoader.getResource(filePath);
    return url.getPath();
}

2,已知xml文件路径,获取Document对象

/**
     * 根据文件路径获取document对象
     * @param filePath xml文件路径
     * @return
     */
public static Document getDocument(String filePath) {
    String realPath = getRealPath(filePath);
    SAXReader builder = new SAXReader();
    InputStream in = new FileInputStream(realPath);
    InputStreamReader reader = new InputStreamReader(in, "UTF-8");
    Document  document = builder.read(reader);
    return document;
}

3,写入xml文件

/**
     * 写入xml文件
     * @param document  document对象
     * @param filePath  xml文件路径
     */
public static void writeDocument(Document document,String filePath){
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("UTF-8");
    XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(FileUtils.getRealPath(filePath))), format);
    writer.write(document);
    writer.close();
}

4,获取指定节点的值

/**
 * 根据节点路径获取节点值
 * @param filePath  xml文件路径
 * @param nodePath  节点路径
 * @return
 */
public static String getNodeValueByPath(String filePath, String nodePath) {
    Document document = getDocument(filePath);
    Element element = (Element) document.selectSingleNode(nodePath);
    return element.getText();
}

5,添加子节点
5.1根据自己名称和内容添加

/**
 * 添加子节点--传入子节点名称和内容进行添加,一次只能添加一个子节点,并且只能添加一层
 * @param filePath  文件路径
 * @param nodePath  要添加子节点的路径
 * @param nodeName  添加的字节点名称
 * @param text  添加的子节点内容
 */
public static void addChildNodeByNodeAndValue(String filePath, String nodePath, String nodeName,String text) {
    Document document = getDocument(filePath);
    Element element = (Element) document.selectSingleNode(nodePath);
    element.addElement(nodeName).setText(text);
    writeDocument(document, filePath);
}

5.2 根据子节点xml字符串添加

/**
 * 添加子节点--传入子节点xml字符串 进行添加,一次只能添加一个子节点,但是可以添加多层
 * @param filePath  XML文件路径
 * @param nodePath    节点路径
 * @param childStr  子节点xml字符串
 */
public static void addChildNodeByChildStr(String filePath, String nodePath, String childStr) {
    Document document = getDocument(filePath);
    Element element = (Element) document.selectSingleNode(nodePath);
    Document childDocument = DocumentHelper.parseText(childStr);
    Node node=childDocument.getRootElement();
    element.add(node);
    writeDocument(document, filePath);
}

6,添加兄弟节点
添加兄弟节点的方法很简单,先找到父节点,然后为父节点添加子节点即可

/**
 * 为指定节点添加兄弟节点
 * @param filePath  xml文件路径
 * @param nodePath  要添加兄弟节点的节点路径
 * @param brotherStr  要添加的兄弟节点的xml字符串,例如:<usercode>12345678</usercode>
 */
public static void addBrotherNodeByNodeStr(String filePath, String nodePath, String brotherStr){
    Document document = getDocument(filePath);
    Element element = (Element) document.selectSingleNode(nodePath);
    Document brotherDocument = DocumentHelper.parseText(brotherStr);
    Node node=brotherDocument.getRootElement();
    if(element.getParent()==null){
        System.out.println("不能为根节点添加兄弟节点");
        return;
    }
    element.getParent().add(node);
    writeDocument(document, filePath);
}

7,添加父节点
添加父节点类似于在链表中插入节点,先保留当前节点的所有信息,创建新节点,让当前节点作为新节点的父节点,删除当前节点,当前节点的原来的父节点作为新节点的父节点:

/**
 * 为指定节点添加父节点,原理类似链表插入节点
 * @param filePath  xml文件路径
 * @param nodePath  节点路径
 * @param parentXmlStr  要添加的父节点的xml字符串
 */
public static void addParentNodeByParentXmlStr(String filePath,String nodePath,String parentXmlStr) {
    Document document = null;

    Element element = (Element) document.selectSingleNode(nodePath);
    Element formerParentElement = element.getParent();

    //代表是根节点
    if(formerParentElement==null){
        System.out.println("不能为根节点添加父节点。。。");
        return;
    } else {
        //创建新的父节点
        Element newParentElement=DocumentHelper.parseText(parentXmlStr).getRootElement();
        //删除当前节点和它的子节点
        element.detach();

        //新的父节点添加原来的节点
        newParentElement.add(element);
        //节点的原来的父节点添加新的父节点
        formerParentElement.add(newParentElement);
    }

       writeDocument(document, filePath);
}

8,删除节点:
删除节点可以使用detach方法,此方法会删除当前节点以及子节点。

/**
 * 根据节点路径删除节点
 * @param filePath  xml文件路径
 * @param nodePath  节点路径
 */
public static void removeNodeByXPath(String filePath, String nodePath){
    Document document = getDocument(filePath);
    Element element = (Element) document.selectSingleNode(nodePath);
    element.detach();
    writeDocument(document, filePath);
}

9,删除节点的所有子节点

/**
 * 删除指定节点的所有子节点
 * @param filePath
 * @param nodePath
 */
public static void removeChildNodeByXPath(String filePath, String nodePath){
    Document document = getDocument(filePath);

    Element element = (Element) document.selectSingleNode(nodePath);
    @SuppressWarnings("unchecked")
    List<Element> list = element.elements();
    if(list!=null){
        for(Element el : list){
            el.detach();
        }
    }

    writeDocument(document, filePath);

}

10,更新叶子节点内容
所谓叶子节点,代表该节点没有子节点。

/**
 * 根据节点路径修改叶子节点内容
 * 
 * @param filePath xml文件相对于根目录的路径,例如:xml/test.xml
 * @param nodePath 节点路径,例如:/hyman/user/username
 * @param text 要更新的节点内容
 */
public static void setLeafNodeValue(String filePath, String nodePath, String text) {
    Document document = getDocument(filePath);

    Element element = (Element) document.selectSingleNode(nodePath);
    element.setText(text);
    writeDocument(document, filePath);
}

11,更新非叶子结点内容
(1)删除原来的子节点,设置成text

/**
 * 根据节点路径和新增内容字符串修改非叶子节点内容,删除原来子节点,设置新的text值
 * 
 * @param filePath  xml文件路径
 * @param nodePath  节点路径
 * @param text  设置后的节点内容
 */
public static void setNonLeafNodeValueToText(String filePath, String nodePath, String text) {
    Document document = getDocument(filePath);

    removeChildNodeByXPath(document, nodePath);
    setLeafNodeValue(document, nodePath, text);

    writeDocument(document, filePath);
}

(2)删除原来的子节点,添加新子节点

/**
 * 设置非叶子结点的值,删除原来的子节点,设置新的子节点
 * @param filePath  xml文件路径
 * @param nodePath  节点路径
 * @param childStr  新的子节点的xml字符串
 */
public static void setNonLeafNodeValueToNewChild(String filePath, String nodePath, String childStr) {
    Document document = getDocument(filePath);

    removeChildNodeByXPath(document, nodePath);
    addChildNodeByChildStr(document, nodePath, childStr);

    writeDocument(document, filePath);
}

12,XML转String
用asXml方法即可完成。

public static String xmlToStr(String filePath){
    Document document = getDocument(filePath);
    return document.asXML();
}

13,String转xml
利用DocumentHelper.parseText方法可以完成。

/**
 * 把xml格式的字符串转化为xml对象
 * @param xmlStr  xml格式的字符串
 * @param filePath  节点路径
 * @return
 */
public static Document strToXml(String xmlStr,String filePath){
    xmlStr = preTreatXmlStr(xmlStr);
    Document document=null;
    document=DocumentHelper.parseText(xmlStr);
    writeDocument(document, filePath);
    return document;
}

其中预处理函数如下:

/**
 * 预处理xml字符串,去掉乱码特殊字符,加上xml抬头
 * 
 * @param xmlStr
 * @return
 */
public static String preTreatXmlStr(String xmlStr) {
    if (StringUtils.isBlank(xmlStr) || "null".equalsIgnoreCase(xmlStr)) {
        xmlStr = "<hyman></hyman>";
    }
    // 去掉乱码
    xmlStr.replace("�", "");
    // 添加xml文件开头
    if (!xmlStr.startsWith("<?xml")) {
        xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + xmlStr;
    }
    return xmlStr;
}

14,完整代码如下:
(1)FileUtils.java:

import java.net.URL;

public class FileUtils {
    /**
     * 获取文件的实际路径
     * @param filePath 文件相对于根目录的路径
     * @return
     */
    public static String getRealPath(String filePath){
        ClassLoader classLoader=Thread.currentThread().getContextClassLoader();
        URL url=classLoader.getResource(filePath);
        return url.getPath();
    }
}

(2)XmlUtils.java:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * 读取和操作XML文件
 * 
 * @author Administrator
 *
 * 包括如下方法: 
 * 1,读取节点的值 
 * 2,新增节点:
 *      2.1,在/hyman/user节点下添加子节点:根据子节点名称和内容添加;根据子节点xml添加
 *      2.2,为/hyman/user/username节点添加兄弟节点/hyman/user/usercode
 *      2.3,为节点/hyman/user/username添加父节点/hyman/user/usermanage,那么原来的节点路径变为:/hyman/user/usermanage/username 
 * 3,删除节点 
 * 4,设置节点的值
 *      4.1,设置叶子节点/hyman/user/username的值 
 *      4.2,设置非叶子结点(即存在子节点)/hyman/user的值
 *          4.2.1,删除原来的子节点和子节点的子节点,设置文本值 
 *          4.2.2,删除原来的子节点和子节点的子节点,设置新的子节点
 * 5,把xml文件转化为string输出 
 * 6,把string转化为xml输出
 *
 */

public class XmlUtils {
    /**
     * 根据文件路径获取document对象
     * @param filePath xml文件路径
     * @return
     */
    public static Document getDocument(String filePath) {
        String realPath = FileUtils.getRealPath(filePath);
        SAXReader builder = new SAXReader();
        Document document=null;
        try {
            InputStream in = new FileInputStream(realPath);
            InputStreamReader reader = new InputStreamReader(in, "UTF-8");
            document = builder.read(reader);
        } catch (Exception e) {
            System.out.println("获取document对象出错!");
            e.printStackTrace();
        }
        return document;
    }


    /**
     * 写入xml文件
     * @param document  document对象
     * @param filePath  xml文件路径
     */
    public static void writeDocument(Document document,String filePath){
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        try {
            XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(FileUtils.getRealPath(filePath))), format);
            writer.write(document);
            writer.close();
        } catch (Exception e) {
            System.out.println("写入xml文件失败");
            e.printStackTrace();
        }
    }


    /**
     * 根据节点路径获取节点值
     * @param filePath  xml文件路径
     * @param nodePath  节点路径
     * @return
     */
    public static String getNodeValueByPath(String filePath, String nodePath) {
        Document document = getDocument(filePath);
        if(document==null){
            return null;
        }
        Element element = (Element) document.selectSingleNode(nodePath);
        System.out.println(nodePath + ": " + element.getText());
        return element.getText();
    }


    /**
     * 添加子节点--传入子节点名称和内容进行添加,一次只能添加一个子节点,并且只能添加一层
     * @param filePath  文件路径
     * @param nodePath  要添加子节点的路径
     * @param nodeName  添加的字节点名称
     * @param text  添加的子节点内容
     */
    public static void addChildNodeByNodeAndValue(String filePath, String nodePath, String nodeName,String text) {
        Document document = getDocument(filePath);
        if(document==null){
            return;
        }
        try {
            Element element = (Element) document.selectSingleNode(nodePath);
            element.addElement(nodeName).setText(text);
            writeDocument(document, filePath);
        } catch (Exception e) {
            System.out.println("添加子节点失败。。。");
            e.printStackTrace();
        }
    }

    /**
     * 
     * @param document
     * @param nodePath
     * @param nodeName
     * @param text
     */
    public static void addChildNodeByNodeAndValue(Document document, String nodePath, String nodeName,String text) {
        try {
            Element element = (Element) document.selectSingleNode(nodePath);
            element.addElement(nodeName).setText(text);
        } catch (Exception e) {
            System.out.println("添加子节点失败。。。");
            e.printStackTrace();
        }
    }

    /**
     * 添加子节点--传入子节点xml字符串 进行添加,一次只能添加一个子节点,但是可以添加多层
     * @param filePath  XML文件路径
     * @param nodePath  节点路径
     * @param childStr  子节点xml字符串
     */
    public static void addChildNodeByChildStr(String filePath, String nodePath, String childStr) {
        Document document = getDocument(filePath);
        if(document==null){
            return;
        }
        try {
            if(StringUtils.isBlank(childStr) || !childStr.startsWith("<")){
                return;
            }
            Element element = (Element) document.selectSingleNode(nodePath);
            Document childDocument = DocumentHelper.parseText(childStr);
            Node node=childDocument.getRootElement();
            element.add(node);

            writeDocument(document, filePath);
        } catch (Exception e) {
            System.out.println("添加子节点失败。。。");
            e.printStackTrace();
        }
    }


    /**
     * 添加子节点--传入子节点xml字符串 进行添加,一次只能添加一个子节点,但是可以添加多层
     * @param document  document对象
     * @param nodePath  节点路径
     * @param childStr  子节点字符串
     * @throws DocumentException 
     */
    public static void addChildNodeByChildStr(Document document, String nodePath, String childStr) throws DocumentException {
        if(StringUtils.isBlank(childStr) || !childStr.startsWith("<")){
            return;
        }
        Element element = (Element) document.selectSingleNode(nodePath);
        Document childDocument = DocumentHelper.parseText(childStr);
        Node node=childDocument.getRootElement();
        element.add(node);
    }


    /**
     * 为指定节点添加兄弟节点
     * @param filePath  xml文件路径
     * @param nodePath  要添加兄弟节点的节点路径
     * @param brotherStr  要添加的兄弟节点的xml字符串,例如:<usercode>12345678</usercode>
     */
    public static void addBrotherNodeByNodeStr(String filePath, String nodePath, String brotherStr){
        Document document = getDocument(filePath);
        if(document==null){
            return;
        }
        try {
            if(StringUtils.isBlank(brotherStr) || !brotherStr.startsWith("<")){
                return;
            }
            if(StringUtils.isBlank(nodePath)){
                return;
            }
            Element element = (Element) document.selectSingleNode(nodePath);

            Document brotherDocument = DocumentHelper.parseText(brotherStr);
            Node node=brotherDocument.getRootElement();
            if(element.getParent()==null){
                System.out.println("不能为根节点添加兄弟节点");
                return;
            }
            element.getParent().add(node);

            writeDocument(document, filePath);
        } catch (Exception e) {
            System.out.println("添加子节点失败。。。");
            e.printStackTrace();
        }
    }


    /**
     * 为指定节点添加父节点,原理类似链表插入节点
     * @param filePath  xml文件路径
     * @param nodePath  节点路径
     * @param parentXmlStr  要添加的父节点的xml字符串
     */
    public static void addParentNodeByParentXmlStr(String filePath,String nodePath,String parentXmlStr) {
        Document document = null;
        try {
            document = getDocument(filePath);
            if(document==null){
                return;
            }
            Element element = (Element) document.selectSingleNode(nodePath);
            Element formerParentElement = element.getParent();

            //代表是根节点
            if(formerParentElement==null){
                System.out.println("不能为根节点添加父节点。。。");
                return;
            } else {
                //创建新的父节点
                Element newParentElement=DocumentHelper.parseText(parentXmlStr).getRootElement();
                //删除当前节点和它的子节点
                element.detach();

                //新的父节点添加原来的节点
                newParentElement.add(element);
                //节点的原来的父节点添加新的父节点
                formerParentElement.add(newParentElement);
            }

             writeDocument(document, filePath);
         } catch (Exception e){
             e.printStackTrace();
         }
    }


    /**
     * 根据节点路径删除节点
     * @param filePath  xml文件路径
     * @param nodePath  节点路径
     */
    public static void removeNodeByXPath(String filePath, String nodePath){
        Document document = getDocument(filePath);
        if(document==null){
            return;
        }
        try {
            if(StringUtils.isBlank(nodePath)){
                return;
            }
            Element element = (Element) document.selectSingleNode(nodePath);
            element.detach();

            writeDocument(document, filePath);
        } catch (Exception e) {
            System.out.println("删除子节点失败。。。");
            e.printStackTrace();
        }
    }


    /**
     * 根据节点路径删除节点
     * @param filePath  xml文件路径
     * @param nodePath  节点路径
     */
    public static void removeNodeByXPath(Document document, String nodePath){
        if(StringUtils.isBlank(nodePath)){
            return;
        }
        Element element = (Element) document.selectSingleNode(nodePath);
        element.detach();
    }



    /**
     * 删除指定节点的所有子节点
     * @param filePath
     * @param nodePath
     */
    public static void removeChildNodeByXPath(String filePath, String nodePath){
        Document document = getDocument(filePath);
        if(document==null){
            return;
        }
        try {
            if(StringUtils.isBlank(nodePath)){
                return;
            }
            Element element = (Element) document.selectSingleNode(nodePath);
            @SuppressWarnings("unchecked")
            List<Element> list = element.elements();
            if(list!=null){
                for(Element el : list){
                    el.detach();
                }
            }

            writeDocument(document, filePath);
        } catch (Exception e) {
            System.out.println("添加子节点失败。。。");
            e.printStackTrace();
        }
    }


    /**
     * 删除指定节点的所有子节点
     * @param filePath
     * @param nodePath
     */
    public static void removeChildNodeByXPath(Document document, String nodePath){
        if(StringUtils.isBlank(nodePath)){
            return;
        }
        Element element = (Element) document.selectSingleNode(nodePath);
        @SuppressWarnings("unchecked")
        List<Element> list = element.elements();
        if(list!=null){
            for(Element el : list){
                el.detach();
            }
        }
    }

    /**
     * 根据节点路径修改叶子节点内容
     * 
     * @param filePath xml文件相对于根目录的路径,例如:xml/test.xml
     * @param nodePath 节点路径,例如:/hyman/user/username
     * @param text 要更新的节点内容
     */
    public static void setLeafNodeValue(String filePath, String nodePath, String text) {
        Document document = getDocument(filePath);
        if(document==null){
            return;
        }

        try {
            Element element = (Element) document.selectSingleNode(nodePath);
            element.setText(text);

            writeDocument(document, filePath);
        } catch (Exception e) {
            System.out.println("设置节点值失败。。。nodepath: " + nodePath);
            e.printStackTrace();
        }
    }

    /**
     * 根据节点路径修改叶子节点内容
     * 
     * @param filePath  xml文件路径
     * @param nodePath  节点路径
     * @param text  更新后的节点内容
     */
    public static void setLeafNodeValue(Document document, String nodePath, String text) {
        Element element = (Element) document.selectSingleNode(nodePath);
        element.setText(text);
    }

    /**
     * 根据节点路径和新增内容字符串修改非叶子节点内容,删除原来子节点,设置新的text值
     * 
     * @param filePath  xml文件路径
     * @param nodePath  节点路径
     * @param text  设置后的节点内容
     */
    public static void setNonLeafNodeValueToText(String filePath, String nodePath, String text) {
        Document document = getDocument(filePath);
        if(document==null){
            return;
        }

        try {
            removeChildNodeByXPath(document, nodePath);
            setLeafNodeValue(document, nodePath, text);

            writeDocument(document, filePath);
        } catch (Exception e) {
            System.out.println("设置节点值失败。。。nodepath: " + nodePath);
            e.printStackTrace();
        }
    }


    /**
     * 设置非叶子结点的值,删除原来的子节点,设置新的子节点
     * @param filePath  xml文件路径
     * @param nodePath  节点路径
     * @param childStr  新的子节点的xml字符串
     */
    public static void setNonLeafNodeValueToNewChild(String filePath, String nodePath, String childStr) {
        Document document = getDocument(filePath);
        if(document==null){
            return;
        }

        try {
            removeChildNodeByXPath(document, nodePath);
            addChildNodeByChildStr(document, nodePath, childStr);

            writeDocument(document, filePath);
        } catch (Exception e) {
            System.out.println("设置节点值失败。。。nodepath: " + nodePath);
            e.printStackTrace();
        }
    }


    /**
     * xml对象转化为字符串
     * @param filePath
     * @return
     */
    public static String xmlToStr(String filePath){
        Document document = getDocument(filePath);
        if(document==null){
            return "";
        }

        return document.asXML();
    }


    /**
     * 把xml格式的字符串转化为xml对象
     * @param xmlStr  xml格式的字符串
     * @param filePath  节点路径
     * @return
     */
    public static Document strToXml(String xmlStr,String filePath){
        xmlStr = preTreatXmlStr(xmlStr);
        Document document=null;
        try {
            document=DocumentHelper.parseText(xmlStr);
            writeDocument(document, filePath);
        } catch (Exception e) {
            System.out.println("字符串转化为Document对象失败");
            e.printStackTrace();
        }

        return document;
    }


    /**
     * 预处理xml字符串,去掉乱码特殊字符,加上xml抬头
     * 
     * @param xmlStr
     * @return
     */
    public static String preTreatXmlStr(String xmlStr) {
        if (StringUtils.isBlank(xmlStr) || "null".equalsIgnoreCase(xmlStr)) {
            xmlStr = "<hyman></hyman>";
        }
        // 去掉乱码
        xmlStr.replace("�", "");
        // 添加xml文件开头
        if (!xmlStr.startsWith("<?xml")) {
            xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + xmlStr;
        }

        return xmlStr;
    }

}

15,测试代码如下:

public class XmlUtilsTest {

    @Test
    public void testGetNodeValueByPath() {
        String filePath = "xml/test.xml";
        String nodePath="/hyman/user/username";
        try {
            XmlUtils.getNodeValueByPath(filePath, nodePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testAddChildNode(){
        String filePath = "xml/test.xml";
        String nodePath = "hyman/user";
        String nodeName="mobile";
        String text="18888888888";
        try {
            XmlUtils.addChildNodeByNodeAndValue(filePath, nodePath, nodeName, text);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    @Test
    public void testAddChildNodeByChildStr(){
        String filePath = "xml/test.xml";
        String nodePath = "hyman/user";
        String childStr="<teacher><name>zhangsan</name><mobile>18889898989</mobile></teacher>";
        try {
            XmlUtils.addChildNodeByChildStr(filePath, nodePath, childStr);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    @Test
    public void testAddBrotherNodeByNodeStr(){
        String filePath = "xml/test.xml";
        String nodePath = "hyman/user/username";
        String brotherStr="<usercode>12345678</usercode>";
        try {
            XmlUtils.addBrotherNodeByNodeStr(filePath, nodePath, brotherStr);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testRemoveNodeByXPath(){
        String filePath = "xml/test.xml";
        String nodePath = "hyman/user";
        try {
            XmlUtils.removeNodeByXPath(filePath, nodePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    @Test
    public void testRemoveChildNodeByXPath(){
        String filePath = "xml/test.xml";
        String nodePath = "hyman/user";
        try {
            XmlUtils.removeChildNodeByXPath(filePath, nodePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    @Test
    public void testSetLeafNodeValue(){
        String filePath = "xml/test.xml";
        String nodePath = "hyman/user/password";
        String text="hello world";
        XmlUtils.setLeafNodeValue(filePath, nodePath, text);
    }



    @Test
    public void testSetNonLeafNodeValueToText(){
        String filePath = "xml/test.xml";
        String nodePath = "hyman/user";
        String text="hello world";
        XmlUtils.setNonLeafNodeValueToText(filePath, nodePath, text);
    }



    @Test
    public void testSetNonLeafNodeValueToNewChild(){
        String filePath = "xml/test.xml";
        String nodePath = "hyman/user";
        String childStr="<userinfo><usercode>12345678</usercode><addr>beijing</addr></userinfo>";
        XmlUtils.setNonLeafNodeValueToNewChild(filePath, nodePath, childStr);
    }


    @Test
    public void testXmlToStr(){
        String filePath = "xml/test.xml";
        String xmlStr=XmlUtils.xmlToStr(filePath);
        System.out.println(xmlStr);
    }



    @Test
    public void testStrToXml(){
        String xmlStr="<hyman><user><userinfo><usercode>88888888</usercode><addr>beijing</addr></userinfo></user></hyman>";
        XmlUtils.strToXml(xmlStr,"xml/test2.xml");
    }


    @Test
    public void testAddParentNodeByXmlStr(){
        String filePath = "xml/test.xml";
        String nodePath = "hyman/user/username";
        String parentStr = "<userinfo></userinfo>";
        XmlUtils.addParentNodeByParentXmlStr(filePath, nodePath, parentStr);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这个问题我可以回答。以下是Java使用dom4j读取XML文件的基本步骤: 1. 导入dom4j的jar包 你可以通过maven或手动下载jar包的方式导入dom4j的jar包。 2. 创建SAXReader对象 SAXReader是dom4j的核心类,用于读取XML文件并将其转换为Document对象。 3. 加载XML文件 使用SAXReader对象的read方法加载XML文件,并将其转换为Document对象。 4. 获取根节点 通过Document对象的getRootElement方法获取XML文件的根节点。 5. 遍历节点 可以使用递归的方式遍历XML文件的节点,获取节点的名称、属性、子节点等信息。 下面是一个简单的示例代码: ```java import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.File; public class Dom4jDemo { public static void main(String[] args) { try { // 创建SAXReader对象 SAXReader reader = new SAXReader(); // 加载XML文件 Document document = reader.read(new File("example.xml")); // 获取根节点 Element root = document.getRootElement(); // 遍历节点 print(root); } catch (Exception e) { e.printStackTrace(); } } public static void print(Element element) { // 输出节点名称 System.out.println(element.getName()); // 输出节点属性 List<Attribute> attributes = element.attributes(); for (Attribute attribute : attributes) { System.out.println(attribute.getName() + ": " + attribute.getValue()); } // 输出子节点 List<Element> elements = element.elements(); for (Element e : elements) { print(e); } } } ``` 以上是一个简单的dom4j读取XML文件的示例代码,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值