java解析XML

Posted 情绪i

tags:

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

XMl (eXtensible Markup Language)可扩展标记语言 属于数据存储语言
XML的特点:
可以在任何应用程序中读取数据
极其简单
简化数据共享和数据传输
XML和html的区别:HTML 旨在显示信息,而 XML 旨在传输信息。XML要求所有的标记都要成双成对出现,并区分大小写,而HTML标记不区分大小写,

(DOM解析方式)

需要在工程中导入dom4j.jar包
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,
链接:https://pan.baidu.com/s/1c2pTmd6 密码:u6oy

org.dom4j.io提供了两个类:SAXReader和DOMReader,前者从一个现有的w3c DOM树构建dom4j树,而SAXReader则使用SAX解析器,从不同的输入源构建dom4j树。

SAXReader方式:
解析步骤:

1):创建SAXReader对象(需要导包org.dom4j.io.SAXReader)
SAXReader reader = new SAXReader();
2):读取整个XML文件结构(需要包:org.dom4j.Element;)
Document doc = reader.read(File file);
read()方法可以给一个文件路径 也可以给一个File的对象
3)获取XML文件的根节点  (需要包:org.dom4j.Element)
Element root = doc.getRootElement();
4)获取节点下的元素
List<Element> childList  =root.elements();
获取当前元素指定名称的子元素
root.element(String name)
获取当前元素的名称
root.getName()
获取当前元素的内容
root.getText()
root.getTextTrim()
获取当前元素下指定名称的子元素内容
root.elementText(String name)
获取当前元素的值
root.getStringValue();

全部代码如下:

 

import java.io.File;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class SAXReaderDemo {

    public static void main(String[] args) {
        try {

            // 创建SAXReader对象
            SAXReader reader = new SAXReader();
            // 读取XML文件结构
            Document doc = reader.read(new File("config/server.xml"));
            // 获取XML文件根节点
            Element root = doc.getRootElement();
            // 获取根节点一下的子元素
            List<Element> list = root.elements();

            for (Element item : list) {

                if ("mysql".equals(item.getName())) {
                    System.out.println("MySQL数据库");
                    // 获取MySql下的子元素
                    List<Element> list1 = item.elements();
                    // 迭代子节点的元素值
                    for (Element element : list1) {

                        System.out.println("当前元素是:" + element.getName() + "值是:"
                                + element.getStringValue());
                    }
                } else if ("SQLServer".equals(item.getName())) {
                    System.out.println("SQLServer数据库");
                    // 获取SQLServer下的子元素
                    List<Element> list1 = item.elements();
                    // 迭代子节点的元素值
                    for (Element element : list1) {

                        System.out.println("当前元素是:" + element.getName() + "值是:"
                                + element.getStringValue());
                    }

                }

            }

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

    }

    
}

 

 

 

我的项目结构如下:

 

 xml文件如下:

<?xml version = "1.0" encoding="UTF-8"?>
<server>
    <MySql>
        <driver>com.mysql.jdbc.Driver</driver>
        <url>jdbc:mysql://localhost:3306/database?useSSL=true</url>
        <user>root</user>
        <pwd>1234</pwd>
    </MySql>
    <SQLServer>
        <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
        <url>jdbc:sqlserver://localhost:1433;DatabaseName=database</url>
        <user>sa</user>
        <pwd>1234</pwd>
    </SQLServer>
</server>

用java生成xml文件

1)创建Document对象 通过DocumentHelper的createdocument()方法来获取document对象(需要导包:org.dom4j.Document;org.dom4j.DocumentHelper)
Document doc = DocumentHelper.createDocument();
2)创建根节点 注意 XML文件的根节点只能有一个(需要导包:org.dom4j.Element)
Element root = doc.addElement(String name);
3)添加子节点 返回的是当前节点对象
Element child = root.addElement(String name);
4)后面可以继续添加节点 也可以添加子节点下的子节点
child.addElement(String name); 添加节点
child.addText(String name); 添加节点中的内容
完善DOM结构后 就可以把Document对象写入xml文件中
1)创建XMLWriter 流对象
XMLWriter writer=new XMLWriter();
2)为XMLWriter设定低级输出流
FileOutputStream fos=new FileOutputStream("config/new.xml");
writer.setOutputStream(fos);
3)将document对象写入xml文件中
writer.write(doc);
4)最后关闭XMLWriter流对象
writer.close();

具体代码如下:

 

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;


public class createXML {
    public static void main(String[] args) {
        
        //创建document对象
        Document doc = DocumentHelper.createDocument();
        //创建根节点
        Element root = doc.addElement("server");
        //在根节点上创建两个子节点
        Element child1 = root.addElement("MySql");
        Element child2 = root.addElement("SQLServer");
        
        
        //创建第一个子节点下的节点
        Element child1_driver = child1.addElement("driver");
        child1_driver.addText("com.mysql.jdbc.Driver");
        
        Element child1_url = child1.addElement("url");
        child1_url.addText("jdbc:mysql://localhost:3306/database?useSSL=true");
        
        Element child1_user = child1.addElement("user");
        child1_user.addText("root");
        
        Element child1_pwd = child1.addElement("pwd");
        child1_pwd.addText("1234");
        
        //创建第二个子节点下的节点
        Element child2_driver = child2.addElement("driver");
        child2_driver.addText("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        
        Element child2_url = child2.addElement("url");
        child2_url.addText("jdbc:sqlserver://localhost:1433;DatabaseName=database");
        
        Element child2_user = child2.addElement("user");
        child2_user.addText("sa");
        
        Element child2_pwd = child2.addElement("pwd");
        child2_pwd.addText("1234");
        
        try {
            //创建XMLWriter 流对象
            XMLWriter writer=new XMLWriter();
            //注:XMLWriter writer=new XMLWriter(OutputStream os);,可省略第二步
            //为XMLWriter设定低级输出流
            FileOutputStream fos=new FileOutputStream("config/new.xml");
            writer.setOutputStream(fos);
            //将document对象写入xml文件中
            writer.write(doc);
            //最后关闭XMLWriter流对象
            writer.close();
            
        } catch (Exception e) {
            
            e.printStackTrace();
        } 
    }

}

 

运行代码后刷新config  发现new.xml出现了...

 

以上是关于java解析XML的主要内容,如果未能解决你的问题,请参考以下文章

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration

在java中解析xml有哪几种方法

为 Blogger 上的博客格式化代码片段 [关闭]

java解析xml的几种方式哪种最好?

片段(Java) | 机试题+算法思路+考点+代码解析 2023

无法解析片段中的 findViewById [重复]