• java解析XML的三种方法


    1.SAX事件解析

    package com.wzh.sax;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    //
    public class Saxhandler extends DefaultHandler {
    
    	@Override
    	public void startDocument() throws SAXException {
    		System.out.println("开始解析XML文档...");
    	}
    
    	@Override
    	public void endDocument() throws SAXException {
    		System.out.println("结束解析XML文档...");
    	}
    
    	@Override
    	public void startElement(String uri, String localName, String qName,
    			Attributes attributes) throws SAXException {
    		// TODO Auto-generated method stub
    		super.startElement(uri, localName, qName, attributes);
    		System.out.println("开始解析节点["+qName+"]...");
    		System.out.println("共有["+attributes.getLength()+"]个属性");
    	}
    
    	@Override
    	public void characters(char[] ch, int start, int length)
    			throws SAXException {
    		// TODO Auto-generated method stub
    		super.characters(ch, start, length);
    		String content =new String(ch,start,length);
    		System.out.println(content);
    	}
    
    	@Override
    	public void endElement(String uri, String localName, String qName)
    			throws SAXException {
    		// TODO Auto-generated method stub
    		super.endElement(uri, localName, qName);
    		System.out.println("结束解析XML节点...");
    	}
    }
    

      

    2.Dom加载解析

    package com.wzh.dom;
    
    import java.util.Iterator;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    
    public class DomHandler {
    
    	/*
    	 * 解析XML
    	 */
    	public void read(String fileName) throws Exception {
    		// 定义工厂API 使应用程序能够从XML文档获取生成DOM对象树的解析器
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		// 获取此类的实例之后,将可以从各种输入源解析XML
    		DocumentBuilder builder = factory.newDocumentBuilder();
    		// builder.parse(this.getClass().getResourceAsStream("/" + fileName));
    		// Document接口表示整个HTML或XML文档,从概念上讲,它是文档树的根,并提供对文档数据的基本访问
    		Document document = builder.parse(this.getClass().getResourceAsStream(
    				"/" + fileName));
    		// 获取根节点
    		Element root = document.getDocumentElement();
    		System.out.println(root.getNodeName());
    
    		//读取database节点NodeList接口提供对节点的有序集合的抽象
    		NodeList nodeList = root.getElementsByTagName("database");
    		for (int i = 0; i < nodeList.getLength(); i++) {
    			// 获取一个节点
    			Node node = nodeList.item(i);
    			// 获取该节点所有属性
    			NamedNodeMap attributes = node.getAttributes();
    			for (int j = 0; j < attributes.getLength(); j++) {
    				Node attribute = attributes.item(j);
    				System.out.println(attribute.getNodeName() + ":"
    						+ attribute.getNodeValue());
    			}
    			//获取所有子节点数据
    			NodeList childNodes=node.getChildNodes();
    			for (int j = 0; j < childNodes.getLength(); j++) {
    				Node childNode=childNodes.item(j);
    				System.out.println(childNode.getNodeName()+":"+childNode.getNodeValue());
    			}
    		}
    	}
    
    	public static void main(String[] args) throws Exception {
    		new DomHandler().read("data-source.xml");
    
    	}
    }
    

      

    3.dom4j解析

    package com.wzh.dom4j;

    import java.io.FileOutputStream;
    import java.sql.DatabaseMetaData;
    import java.util.Iterator;
    import java.util.List;

    import org.dom4j.*;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;

    public class Dom4jHandler {

    public void add() throws Exception {
    // 1.创建一个Document
    Document document = DocumentHelper.createDocument();
    // 2.给Document添加数据
    Element root = document.addElement("DataSource");
    // 添加注释
    root.addComment("这是注释信息");
    // 在root根节点下面添加一个子节点
    Element database = root.addElement("database");
    database.addAttribute("name", "mysql");
    database.addAttribute("version", "5.0");
    // 添加子节点
    database.addElement("driver").setText("com.mysql.jdbc.Driver");
    database.addElement("url")
    .setText("jdbc:mysql://localhost:3306/myjdbc");
    database.addElement("user").setText("root");
    database.addElement("password").setText("root");
    // 3.将Document写出文件
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("utf-8");
    // FileOutputStream默认生成的路径在根路径
    XMLWriter xw = new XMLWriter(new FileOutputStream("db.xml"), format);
    xw.write(document);
    xw.close();
    }

    public void update(String fileName) throws Exception {
    // sax解析器
    SAXReader saxReader = new SAXReader();
    // 读到对象
    Document document = saxReader.read(this.getClass().getResourceAsStream(
    "/" + fileName));
    Element root = document.getRootElement();
    List<Element> databases_node = root.elements("database");
    for (Element database_node : databases_node) {
    if (database_node.attributeValue("name").equalsIgnoreCase("mysql")) {
    System.out.println("old:"
    + database_node.attributeValue("name"));
    database_node.attribute("name").setText("Oracle");
    System.out.println("update:"
    + database_node.attributeValue("name"));

    database_node.element("driver").setText("oracel");
    database_node.element("url").setText("jdbc");

    // 删除password节点
    database_node.remove(database_node.element("password"));

    // 删除属性
    database_node.remove(database_node.attribute("version"));
    }
    }

    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("utf-8");
    // FileOutputStream默认生成的路径在根路径
    XMLWriter xw = new XMLWriter(new FileOutputStream("db2.xml"), format);
    xw.write(document);
    xw.close();
    }

    public void read(String fileName) throws Exception {
    // sax解析器
    SAXReader saxReader = new SAXReader();
    // 读到对象
    Document document = saxReader.read(this.getClass().getResourceAsStream(
    "/" + fileName));
    Element root = document.getRootElement();
    System.out.println("根节点:" + root.getName());

    // List<Element> childElements=root.elements();
    List<Element> childElements = root.elements("database");
    for (Element child : childElements) {
    // 获取属性 不知道属性名称时的遍历方法
    List<Attribute> attributes = child.attributes();
    // for (Attribute attribute : attributes) {
    // System.out.println(attribute.getName()+":"+attribute.getValue());
    // }
    String name = child.attributeValue("name");
    // String version = child.attributeValue("version");
    String version = child.attribute("version").getValue();
    System.out.println(name + ":" + version);

    // //获取子节点
    // List<Element> childs=child.elements();
    // for (Element element : childs) {
    // System.out.println(element.getName()+":"+element.getText());
    // }
    System.out.println(child.elementText("driver"));
    System.out.println(child.element("url").getText());
    System.out.println(child.elementTextTrim("user"));
    System.out.println(child.element("password").getTextTrim());

    }
    }

    public static void main(String[] args) throws Exception {
    // new Dom4jHandler().read("data-source.xml");
    // new Dom4jHandler().add();
    new Dom4jHandler().update("data-source.xml");
    }
    }

      

  • 相关阅读:
    WPF 复制和粘贴
    WPF控件模拟双击事件
    WPF获取鼠标当前位置
    user32.dll
    C# 根据IP地址获取城市
    WPF 动态布局Grid
    手机自动化测试:Appium源码分析之跟踪代码分析五
    手机自动化测试:appium源码分析之bootstrap三
    手机自动化测试:appium源码分析之bootstrap二
    手机自动化测试:appium源码分析之bootstrap一
  • 原文地址:https://www.cnblogs.com/zhuawang/p/3371291.html
Copyright © 2020-2023  润新知