Java函数库中如何解析XML格式的数据
发布时间:2023-11-18 10:23:06
在Java中,可以使用许多方式来解析XML格式的数据。下面是一些常用的方法:
1. 使用DOM解析器:
DOM(文档对象模型)解析器将XML文档加载到内存中,然后按照树形结构进行解析。通过节点访问和操作XML文件的不同部分。以下是一个简单的示例代码:
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
public class XMLParser {
public static void main(String[] args) {
try {
File inputFile = new File("input.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(inputFile);
doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("student");
System.out.println("----------------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("
Current Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Student roll no : "
+ eElement.getAttribute("rollno"));
System.out.println("First Name : "
+ eElement
.getElementsByTagName("firstname")
.item(0)
.getTextContent());
System.out.println("Last Name : "
+ eElement
.getElementsByTagName("lastname")
.item(0)
.getTextContent());
System.out.println("Nick Name : "
+ eElement
.getElementsByTagName("nickname")
.item(0)
.getTextContent());
System.out.println("Marks : "
+ eElement
.getElementsByTagName("marks")
.item(0)
.getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. 使用SAX解析器:
SAX(简单API for XML)解析器是基于事件驱动的解析器。当解析器遇到XML事件(如节点的开始和结束标记)时,会触发定义的处理方法。以下是一个简单的示例代码:
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
import java.io.*;
class SAXParserDemo extends DefaultHandler{
public static void main(String[] args) {
try {
File inputFile = new File("input.xml");
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
SAXParserDemo userhandler = new SAXParserDemo();
saxParser.parse(inputFile, userhandler);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void startElement(String uri,
String localName, String qName, Attributes attributes)
throws SAXException {
System.out.println("Start Element :" + qName);
if(attributes.getLength() > 0){
System.out.println("Attribute Name and Value :");
for(int i = 0 ; i < attributes.getLength(); i++) {
System.out.println(attributes.getQName(i)
+ " = " + attributes.getValue(i));
}
}
}
@Override
public void endElement(String uri,
String localName, String qName)
throws SAXException {
System.out.println("End Element :" + qName);
}
@Override
public void characters(char ch[],
int start, int length) throws SAXException {
System.out.println(new String(ch, start, length));
}
}
这是如何使用DOM和SAX解析器解析XML数据的两种常见方法。使用哪种方法取决于您的需求和偏好。此外,还可以使用像JAXB和StAX这样的其他库解析XML数据。无论您选择哪种方法,Java已经提供了广泛的函数库来解析并操作XML格式的数据。
