java如何解析xml文件
使用DOM解析XML
DOM(Document Object Model)解析方式将整个XML文件加载到内存中,形成树状结构,适合处理较小的XML文件。
创建DocumentBuilderFactory和DocumentBuilder对象:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
解析XML文件并获取Document对象:
Document document = builder.parse(new File("file.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;
// 处理元素
}
}
使用SAX解析XML
SAX(Simple API for XML)是事件驱动的流式解析方式,适合处理大型XML文件,内存占用较少。
创建SAXParser对象:
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
自定义Handler类继承DefaultHandler:
class MyHandler extends DefaultHandler {
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) {
// 处理开始标签
}
@Override
public void characters(char[] ch, int start, int length) {
// 处理文本内容
}
@Override
public void endElement(String uri, String localName, String qName) {
// 处理结束标签
}
}
执行解析:
parser.parse("file.xml", new MyHandler());
使用JDOM解析XML
JDOM是专为Java优化的XML解析库,API更简洁。
创建SAXBuilder并获取Document对象:
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(new File("file.xml"));
获取根元素并遍历:
Element root = document.getRootElement();
List<Element> children = root.getChildren();
for (Element child : children) {
String name = child.getName();
String value = child.getText();
}
使用DOM4J解析XML
DOM4J是另一个流行的Java XML解析库,性能优异且功能丰富。
创建SAXReader并读取XML文件:
SAXReader reader = new SAXReader();
Document document = reader.read(new File("file.xml"));
获取根节点并遍历:
Element root = document.getRootElement();
for (Iterator<Element> it = root.elementIterator(); it.hasNext();) {
Element element = it.next();
String name = element.getName();
String text = element.getText();
}
使用StAX解析XML
StAX(Streaming API for XML)提供基于指针的XML解析方式,结合了DOM和SAX的优点。
创建XMLInputFactory和XMLStreamReader:
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = factory.createXMLStreamReader(new FileInputStream("file.xml"));
遍历XML事件:
while (reader.hasNext()) {
int event = reader.next();
if (event == XMLStreamConstants.START_ELEMENT) {
String elementName = reader.getLocalName();
// 处理开始元素
} else if (event == XMLStreamConstants.CHARACTERS) {
String text = reader.getText();
// 处理文本内容
}
}





