当前位置 : 主页 > 编程语言 > java >

java 解析xml 工具类

来源:互联网 收集:自由互联 发布时间:2023-10-10
Java解析XML的工具类 XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言。它被广泛应用于Web服务、配置文件和数据传输等领域。在Java开发中,我们经常需要解析XML数据并

Java解析XML的工具类

XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言。它被广泛应用于Web服务、配置文件和数据传输等领域。在Java开发中,我们经常需要解析XML数据并提取其中的信息。为了简化这个过程,我们可以使用一些Java库提供的工具类来帮助我们解析XML数据。

本文将介绍Java中常用的两种解析XML的工具类:DOM(Document Object Model)和SAX(Simple API for XML)。

DOM解析器

DOM解析器将整个XML文档加载到内存中,构建一个树形结构,可以通过遍历树的节点来访问XML的各个元素和属性。DOM解析器的优点是可以随机访问XML的任何部分,但是在处理大型XML文件时,会占用大量的内存。

下面是一个使用DOM解析器解析XML的示例代码:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomParserExample {
    public static void main(String[] args) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.parse("example.xml");
            
            Element root = document.getDocumentElement();
            NodeList nodeList = root.getChildNodes();
            
            for (int i = 0; i < nodeList.getLength(); i++) {
                Node node = nodeList.item(i);
                
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    Element element = (Element) node;
                    String name = element.getNodeName();
                    String value = element.getTextContent();
                    
                    System.out.println(name + ": " + value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们首先创建一个DocumentBuilderFactory对象来获取DocumentBuilder实例。然后,我们使用DocumentBuilder来解析XML文件并返回一个Document对象。接下来,我们可以通过调用Document对象的方法来访问XML的元素和属性。在这个示例中,我们遍历了XML文档的所有子节点,并打印出节点的名称和文本内容。

SAX解析器

SAX解析器是一种事件驱动的解析器,它逐行读取XML文档并触发相应的事件。相比DOM解析器,SAX解析器不需要将整个XML文档加载到内存中,因此可以处理大型XML文件,但是它只能顺序访问XML的内容,无法随机访问。

下面是一个使用SAX解析器解析XML的示例代码:

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class SaxParserExample {
    public static void main(String[] args) {
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();
            
            DefaultHandler handler = new DefaultHandler() {
                boolean bName = false;
                boolean bValue = false;
                
                public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
                    if (qName.equalsIgnoreCase("name")) {
                        bName = true;
                    }
                    
                    if (qName.equalsIgnoreCase("value")) {
                        bValue = true;
                    }
                }
                
                public void characters(char[] ch, int start, int length) throws SAXException {
                    if (bName) {
                        System.out.println("Name: " + new String(ch, start, length));
                        bName = false;
                    }
                    
                    if (bValue) {
                        System.out.println("Value: " + new String(ch, start, length));
                        bValue = false;
                    }
                }
            };
            
            parser.parse("example.xml", handler);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们首先创建一个SAXParserFactory对象来获取SAXParser实例。然后,我们实现一个DefaultHandler类并重写其中的方法来处理XML事件。在这个示例中,我们只关注namevalue元素,并在处理startElementcharacters事件时打印出元素的名称和文本内容。

上一篇:java 解析word表格数据
下一篇:没有了
网友评论