Java XML 字符串解析与操作
简介
在Java开发中,经常会遇到需要解析和操作XML字符串的需求。XML(可扩展标记语言)是一种用于存储和传输数据的格式,它具有自我描述性、可扩展性和易于阅读的特点。本文将介绍如何在Java中解析和操作XML字符串,并提供相应的代码示例。
解析XML字符串
Java提供了许多方法来解析XML字符串,其中最常用的是使用**DOM(文档对象模型)和SAX(简单API for XML)**。
使用DOM解析XML字符串
DOM解析器将整个XML文档加载到内存中,并以树形结构表示。它允许我们轻松地遍历和操作XML数据。
首先,我们需要创建一个DocumentBuilderFactory
对象,然后使用该对象创建一个DocumentBuilder
对象。
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
String xmlString = "<root><name>John</name><age>25</age></root>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(xmlString)));
上述代码创建了一个包含XML字符串的Document
对象。现在,我们可以使用Document
对象来访问和操作XML数据。
Element root = document.getDocumentElement();
String name = root.getElementsByTagName("name").item(0).getTextContent();
int age = Integer.parseInt(root.getElementsByTagName("age").item(0).getTextContent());
上述代码从根元素开始,通过getElementsByTagName
方法获取指定标签名的元素,并使用getTextContent
方法获取元素的文本内容。
使用SAX解析XML字符串
SAX解析器是一种基于事件驱动的解析器,它逐行读取XML文档,并在解析的过程中触发相应的事件。相比DOM解析器,SAX解析器更加高效,尤其适用于处理大型XML文档。
首先,我们需要创建一个SAXParserFactory
对象,然后使用该对象创建一个SAXParser
对象。
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
String xmlString = "<root><name>John</name><age>25</age></root>";
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
接下来,我们需要创建一个继承自DefaultHandler
的类,重写相应的方法来处理XML事件。
public class MyHandler extends DefaultHandler {
boolean isName = false;
boolean isAge = false;
String name;
int age;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equals("name")) {
isName = true;
} else if (qName.equals("age")) {
isAge = true;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (isName) {
name = new String(ch, start, length);
isName = false;
} else if (isAge) {
age = Integer.parseInt(new String(ch, start, length));
isAge = false;
}
}
}
最后,我们可以使用上述类来解析XML字符串。
MyHandler handler = new MyHandler();
parser.parse(new InputSource(new StringReader(xmlString)), handler);
String name = handler.name;
int age = handler.age;
上述代码通过parse
方法将XML字符串解析为事件,并调用相应的事件处理方法来提取XML数据。
操作XML字符串
一旦我们将XML字符串解析为Document
对象,就可以轻松地对其进行操作。下面是一些常见的操作示例:
创建XML字符串
我们可以使用DocumentBuilder
和Document
对象来创建XML字符串。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element root = document.createElement("root");
document.appendChild(root);
Element name = document.createElement("name");
name.appendChild(document.createTextNode("John"));
root.appendChild(name);
Element age = document.createElement("age");
age.appendChild(document.createTextNode("25"));
root.appendChild(age);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer