一、DOM方式解析XML
DOM方式将XML文件以树形结构加载到内存中,然后通过节点遍历来实现对XML数据的解析。由于需要将整个文档加载到内存中,适用于小型XML文件,对大型XML文件的解析效率较低。
1. 需要使用的类和接口
- DocumentBuilderFactory
- DocumentBuilder
- Document
- NodeList
- Node
2. DOM方式解析XML的步骤
- 创建DocumentBuilderFactory对象。
- 通过DocumentBuilderFactory创建DocumentBuilder对象,通过DocumentBuilder加载XML文件得到Document对象。
- 遍历Document对象,获取XML文件中的节点信息。
3. 示例代码
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("file.xml"));
// 获取文档根节点
Element root = doc.getDocumentElement();
// 获取子节点列表
NodeList nl = root.getChildNodes();
// 遍历子节点
for (int i = 0; i < nl.getLength(); i++) {
Node node = nl.item(i);
// 如果是元素节点
if (Node.ELEMENT_NODE == node.getNodeType()) {
Element ele = (Element) node;
// 获取节点的属性值
String attrValue = ele.getAttribute("attr");
// 获取节点的值
String nodeValue = ele.getTextContent();
// 输出节点信息
System.out.println("Element: " + ele.getNodeName()
+ ", Attribute Value: " + attrValue
+ ", Node Value: " + nodeValue);
}
}
二、SAX方式解析XML
SAX方式是一种基于事件驱动的解析方式,对于大型XML文件的解析效率较高。SAX会按照XML的顺序逐行读取文件,遇到指定事件则触发指定的回调函数进行处理,适用于处理大型XML文件。
1. 需要使用的类和接口
- SAXParserFactory
- SAXParser
- DefaultHandler
2. SAX方式解析XML的步骤
- 创建SAXParserFactory对象。
- 通过SAXParserFactory创建SAXParser对象,将DefaultHandler的实现类对象作为参数传递给SAXParser对象。
- 通过SAXParser的parse方法读取XML文档并解析。
3. 示例代码
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
// 输出节点信息
System.out.print("Element:" + qName);
for (int i = 0; i < attributes.getLength(); i++) {
String attrName = attributes.getQName(i);
String attrValue = attributes.getValue(i);
// 输出属性信息
System.out.print(", Attribute:" + attrName + "=" + attrValue);
}
System.out.println();
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
String content = new String(ch, start, length).trim();
if (!"".equals(content)) {
// 输出节点值
System.out.println("Node Value:" + content);
}
}
};
sp.parse(new File("file.xml"), handler);
三、StAX方式解析XML
StAX方式是一种基于事件驱动的解析方式,与SAX方式类似,但提供了更多的灵活性。StAX方式可以读取XML文件中指定的节点信息,同时也可以写入XML文件。
1. 需要使用的类和接口
- XMLInputFactory
- XMLEventReader
- XMLEvent
2. StAX方式解析XML的步骤
- 创建XMLInputFactory对象。
- 通过XMLInputFactory创建XMLEventReader对象,调用XMLEventReader的nextEvent方法读取XML文档并解析,根据XMLEvent的类型进行不同的操作。
3. 示例代码
XMLInputFactory xif = XMLInputFactory.newInstance();
XMLEventReader xer = xif.createXMLEventReader(new FileInputStream("file.xml"));
while (xer.hasNext()) {
XMLEvent event = xer.nextEvent();
// 如果是元素节点
if (event.isStartElement()) {
// 输出节点信息
System.out.print("Element:" + event.asStartElement().getName().getLocalPart());
// 输出属性信息
Iterator<Attribute> attrs = event.asStartElement().getAttributes();
while (attrs.hasNext()) {
Attribute attr = attrs.next();
System.out.print(", Attribute:" + attr.getName().getLocalPart() + "=" + attr.getValue());
}
System.out.println();
}
// 如果是文本节点
if (event.isCharacters()) {
String content = event.asCharacters().getData().trim();
if (!"".equals(content)) {
// 输出节点值
System.out.println("Node Value:" + content);
}
}
}
四、总结
以上就是Java下3中XML解析DOM方式、SAX方式和StAX方式的完整攻略。DOM方式适用于小型XML文件,SAX方式适用于大型XML文件,StAX方式提供更多的灵活性,可以读取指定的节点信息并写入XML文件。在实际项目中,我们需要根据实际需求选择不同的解析方式来处理XML文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java下3中XML解析 DOM方式、SAX方式和StAX方式 - Python技术站