Java读取XML文件获取数据工具

XML(eXtensible Markup Language)是一种用于存储和传输数据的文本格式,常用于配置文件和数据交换。在Java开发中,经常需要读取XML文件中的数据进行处理,为了方便获取XML文件中的数据,我们可以借助一些工具类来实现。

使用DOM解析XML

在Java中,可以使用DOM(Document Object Model)解析器来读取XML文件。DOM解析器将整个XML文件加载到内存中,以树形结构表示XML文档,通过遍历树节点可以获取XML中的数据。

import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;

public class XMLParser {
    public static void main(String[] args) {
        try {
            File file = new File("data.xml");
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.parse(file);
            
            Element root = document.getDocumentElement();
            NodeList nodeList = root.getElementsByTagName("item");
            
            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.getElementsByTagName("name").item(0).getTextContent();
                    String value = element.getElementsByTagName("value").item(0).getTextContent();
                    System.out.println("Name: " + name + ", Value: " + value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

上述代码通过DOM解析器读取名为"data.xml"的XML文件,并打印出每个"item"节点下的"name"和"value"数据。

使用SAX解析XML

另一种常用的XML解析方式是SAX(Simple API for XML),SAX解析器通过事件驱动的方式逐行读取XML文件,适用于处理大型XML文件,避免将整个文件加载到内存中。

import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

public class SAXParser extends DefaultHandler {
    private boolean isName = false;
    private boolean isValue = false;

    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if (qName.equalsIgnoreCase("name")) {
            isName = true;
        }
        if (qName.equalsIgnoreCase("value")) {
            isValue = true;
        }
    }

    public void characters(char[] ch, int start, int length) throws SAXException {
        if (isName) {
            System.out.println("Name: " + new String(ch, start, length));
            isName = false;
        }
        if (isValue) {
            System.out.println("Value: " + new String(ch, start, length));
            isValue = false;
        }
    }

    public static void main(String[] args) {
        try {
            XMLReader reader = XMLReaderFactory.createXMLReader();
            reader.setContentHandler(new SAXParser());
            reader.parse("data.xml");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.

上述代码通过SAX解析器读取名为"data.xml"的XML文件,并在遇到"name"和"value"元素时输出对应的数据。

使用JDOM解析XML

除了DOM和SAX外,还有JDOM库可以用于解析XML文件,JDOM提供了简单易用的API,更适用于处理小型XML文件。

import org.jdom2.*;
import org.jdom2.input.SAXBuilder;
import java.io.File;
import java.util.List;

public class JDOMParser {
    public static void main(String[] args) {
        try {
            SAXBuilder builder = new SAXBuilder();
            Document document = builder.build(new File("data.xml"));
            Element root = document.getRootElement();
            
            List<Element> nodeList = root.getChildren("item");
            for (Element element : nodeList) {
                String name = element.getChildText("name");
                String value = element.getChildText("value");
                System.out.println("Name: " + name + ", Value: " + value);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

上述代码使用JDOM解析器读取名为"data.xml"的XML文件,并输出每个"item"节点下的"name"和"value"数据。

总结

在Java开发中,读取XML文件获取数据是一项常见的任务,可以通过DOM、SAX或JDOM等方式实现。选择合适的解析器取决于XML