📜  Java XML-概述(1)

📅  最后修改于: 2023-12-03 15:01:32.792000             🧑  作者: Mango

Java XML-概述

什么是XML

XML全名是扩展标记语言,它是一种标记语言,它的目的是为了让不同的软件系统之间能够互相传递数据,XML的语法与HTML和SGML很相似,但是它被设计成具有通用性和扩展性,在各种应用领域中都能发挥作用。

XML的基本结构是由标签、属性、值组成的,每个标签都是成对出现的,并且可以嵌套。XML的属性是用来描述元素的特征,而值则表示元素所包含的内容。下面是一个XML的例子:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
</bookstore>
Java中的XML

Java提供了许多工具类和API来处理XML文件。其中最基本的就是JAXP,它是Java API for XML Processing的缩写,它提供了DOM和SAX两种解析方式。

DOM解析

DOM全称是Document Object Model,即文档对象模型。DOM会将整个XML文档加载进内存中作为一个树形结构,开发者可以通过访问树上的节点来解析XML文件。

具体来说,先创建一个DocumentBuilderFactory实例,然后用它创建一个DocumentBuilder对象,再通过DocumentBuilder对象的parse方法将XML文件解析成一个Document对象:

File xmlFile = new File("bookstore.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);

针对上面的例子,假设我们已经获取了bookstore节点,需要获取其中的title元素的值。可以通过如下代码实现:

NodeList bookList = doc.getElementsByTagName("book");
for (int i = 0; i < bookList.getLength(); i++) {
    Node bookNode = bookList.item(i);
    Element bookElement = (Element) bookNode;
    if (bookElement.getAttribute("category").equals("cooking")) {
        Node titleNode = bookElement.getElementsByTagName("title").item(0);
        String title = titleNode.getTextContent();
        System.out.println("Title : " + title);
    }
}
SAX解析

SAX全称是Simple API for XML,即XML的简单API。SAX是基于事件驱动的解析方式,所以它的解析效率比DOM高,同时它也比DOM更节省内存。

SAX解析的方式是将XML文档作为输入流,解析过程中SAX会识别各种标签,当它遇到一个节点时,就会产生一个事件,开发者可以自己定义事件的处理逻辑。

具体来说,先创建一个SAXParserFactory实例,然后用它创建一个SAXParser对象,再将XML文件作为输入流传给SAXParser对象的parse方法即可。

File xmlFile = new File("bookstore.xml");
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(xmlFile, new MyHandler());

其中MyHandler即为自定义的事件处理器,如果需要获取bookstore节点中title元素的值,可以在MyHandler中重写startElement方法:

class MyHandler extends DefaultHandler {
 
    boolean isTitle = false;
 
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
 
        if (qName.equalsIgnoreCase("title")) {
            isTitle = true;
        }
    }
 
    @Override
    public void characters(char ch[], int start, int length) throws SAXException {
 
        if (isTitle) {
            System.out.println("Title : " + new String(ch, start, length));
            isTitle = false;
        }
    }
}
总结

以上就是Java中XML的概述和DOM、SAX解析方式的基本使用方法,虽然Java中还有其他的XML工具类和API,但是它们都是在这些基础之上构建而成的。如果想要深入了解XML的使用方法,可以参考Java官方文档或者其他专业书籍。