zoukankan      html  css  js  c++  java
  • 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出现了...

  • 相关阅读:
    彻底理解多态
    变量可以存储在堆中,栈中,方法区中。哪里都可以啊。对象只能存储在堆中
    json序列化后的是字符串,不是二进制。是字符串!!!确定不是二进制!!!
    线程流程理解
    增加一个类的功能可以采用继承或者代理模式或者装饰者模式
    Java 代理模式和装饰者模式的区别
    异常不管咋样,只要抛出了,不管是方法级别抛出,还是类级别抛出。终究有一个地方要对异常进行处理
    汉高澳大利亚sinox为什么不能下载源代码,因为sinox执行unix/linux/windows规划
    使用Visual Studio将Objective-C编译C++
    百度编辑器ueditor简单易用
  • 原文地址:https://www.cnblogs.com/zkdayup/p/7930100.html
Copyright © 2011-2022 走看看