使用Dom4j对XML文档创建与解析

Posted lazyli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Dom4j对XML文档创建与解析相关的知识,希望对你有一定的参考价值。

创建XML文件:

public class Dom4jCreateXml {

    public void testCreatXml() {
        //创建文档对象
        Document document = DocumentHelper.createDocument();
        //创建跟节点
        Element root = document.addElement("students");
        //根据根节点创建子节点
        Element stu01 = root.addElement("student");
        //添加student子节点id属性
        stu01.addAttribute("id", "001");
        //根据student子节点创建name子节点
        Element stu01Name = stu01.addElement("name");
        //给子节点name添加文本
        stu01Name.addText("zhangsan");
        //根据stu01创建子节点age
        Element stu01Age = stu01.addElement("age");
        //给子节点age添加文本
        stu01Age.addText("23");

        //设置输出编码格式
        OutputFormat format = OutputFormat.createCompactFormat();
        format.setEncoding("utf-8");

        //输出指定的xml文件
        Writer out;
        try {
            out = new FileWriter("E://lazyli/test.xml");
            //创建XML输出对象,以指定的格式输出
            XMLWriter writer = new XMLWriter(out, format);
            writer.write(document);
            System.out.println("生成xml文件成功!");
            out.close();
        } catch (Exception e) {
            System.out.println("生成xml文件失败!");
            e.printStackTrace();
        }

    }

    /**
     * 创建一个html格式的xml
     * <?xml version="1.0" encoding="UTF-8"?>
     * <Packet type="REQUEST" version="1.0">
     * <Head>
     * <RequestID> AC00003900021456305194844</RequestID>
     * <RequestType>0002</RequestType>
     * <User>AC000039</User>
     * <Password>bc0TYXab4UjcZiOtX9XpdQ</Password>
     * </Head>
     * <Body>
     * ……
     * </Body>
     * </Packet>
     */
    public void testCreatXml2() {
        //创建一个Document对象
        Document document = DocumentHelper.createDocument();
        //创建一个根节点
        Element root = document.addElement("Packet");
        //设置根节点属性
        root.addAttribute("type", "REQUEST");
        root.addAttribute("version", "1.0");
        //创建root的子节点head,body
        Element eleHead = root.addElement("head");
        Element eleBody = root.addElement("body");
        //处理子节点head,有三个子节点RequestType,User,Password,并添加各个的文本
        Element eleRequestType = eleHead.addElement("RequestType");
        eleRequestType.addText("AC00003900021456305194844");
        Element eleUser = eleHead.addElement("User");
        eleUser.addText("AC000039");
        Element elePassword = eleHead.addElement("Password");
        elePassword.addText("bc0TYXab4UjcZiOtX9XpdQ");
        //处理子节点Body,添加子节点hello,文本world
        Element eleHello = eleBody.addElement("Hello");
        eleHello.addText("world");

        //指定文档输出编码格式
        OutputFormat format = OutputFormat.createCompactFormat();
        format.setEncoding("utf-8");

        Writer out;
        try {
            //创建一个文档输出流对象,向指定的文件中输入
            out = new FileWriter("E://lazyli/test02.xml");
            //创建XMLWriter对象
            XMLWriter writer = new XMLWriter(out, format);
            writer.write(document);
            System.out.println("成功生成xml文件!");
            out.close();
            writer.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        Dom4jCreateXml createXml = new Dom4jCreateXml();
//        createXml.testCreatXml();
        createXml.testCreatXml2();
    }

}

XML文件的解析

public class ParseXml01 {

    User user = new User();

    //递归遍历xml文档,获取里面的元素
    public void parseElement02(Element rootElement) {
        Element element;

        //使用迭代器遍历根节点
        for (Iterator iterator = rootElement.elementIterator(); iterator.hasNext(); ) {
            //获取根子节下面的节点
            element = (Element) iterator.next();
            //打印节点的名字和文本
            //System.out.println("当前节点:" + element.getName() + ",文本:" +element.getTextTrim());
            //将文件中的用户信息提取出来
            if (element.getName().equals("User")) {
                if (element.getName() != null && element.getName() != "") {
                    user.setName(element.getTextTrim());
                }
            }
            if (element.getName().equals("Password")) {
                if (element.getName() != null && element.getName() != "") {
                    user.setPassword(element.getTextTrim());
                }
            }
            //判断当前节点是否存在子节点,存在的话就继续遍历
            //得到节点类型,为1代表有子节点
            if (element.getNodeType() == Node.ELEMENT_NODE) {
                if (element.hasContent()) {
                    parseElement02(element);
                }
            }
        }
    }

    //解析
    public void parseXmlMethod(File file) throws Exception {
        //创建SAXReader解析对象
        SAXReader reader = new SAXReader();
        //根据SAXReader对象创建Document对象
        Document document = reader.read(file);
        //document对象得到根节点
        Element eleRoot = document.getRootElement();
        //打印root信息
        System.out.println("根元素:" + eleRoot.getName() + ",属性:");
        //调用递归方法进行解析节点信息
        parseElement02(eleRoot);
    }

    //打印用户信息
    public void userInfo() throws Exception {
        //调用解析方法,解析文件,输出文件中的用户信息
        parseXmlMethod(new File("E://lazyli/test02.xml"));
        System.out.println("用户名:" + user.getName() + ",密码:" + user.getPassword());
    }

    public static void main(String[] args) throws Exception {
        ParseXml01 parseXml01 = new ParseXml01();
        parseXml01.userInfo();

    }

}

 

以上是关于使用Dom4j对XML文档创建与解析的主要内容,如果未能解决你的问题,请参考以下文章

Java案例:利用dom4j解析XML文件

javaweb学习总结十三(dom4j方式对XML文档进行解析)

我用dom4j创建了一个xml文档,没有错误,但运行没有结果,哪位高手指点一下

如何用Dom4j获取CDATA结点内容

源生API解析XML文档与dom4j解析XML文档

JavaWeb--XML的解析