Java解析xml的四种方法汇总
什么是XML
XML(Extensible Markup Language)即可扩展标记语言,是一种标记语言,它可以用来标记电子文件使其具有结构性的标记语言。XML用于存储和传输数据。在XML文档中,标签没有被预定义是一种被使用者自定义的标记语言。
解析XML的四种方法
方法一:使用DOM
DOM是一种基于树形结构的解析器,将XML文件解析成树形结构,然后可以通过节点间的关系以及标签名来访问节点。
下面是一个使用DOM解析形如如下xml文件的例子:
<students>
<student>
<name>John</name>
<age>18</age>
</student>
<student>
<name>Lucy</name>
<age>19</age>
</student>
</students>
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
File xmlFile = new File("students.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
System.out.println("Root element: " + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("student");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element : "
+ nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Name : "
+ eElement.getElementsByTagName("name").item(0).getTextContent());
System.out.println("Age : "
+ eElement.getElementsByTagName("age").item(0).getTextContent());
}
}
方法二:使用SAX
SAX是一种基于事件驱动的解析器,它遇到XML文件中元素、属性、文字、注释、DTD等事件都会触发相关的事件处理器,通过继承DefaultHandler类定义自己的事件处理器,按事件顺序解析文件,并执行相应操作。
下面是一个使用SAX解析形如上文的xml文件的例子:
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
import org.xml.sax.XMLReader;
File xmlFile = new File("students.xml");
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(new DefaultHandler() {
boolean bname = false;
boolean bage = false;
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equalsIgnoreCase("name")) {
bname = true;
} else if (qName.equalsIgnoreCase("age")) {
bage = true;
}
}
public void characters(char ch[], int start, int length) throws SAXException {
if (bname) {
System.out.println("Name: " + new String(ch, start, length));
bname = false;
} else if (bage) {
System.out.println("Age: " + new String(ch, start, length));
bage = false;
}
}
});
reader.parse(xmlFile.getAbsolutePath());
方法三:使用JDOM
JDOM是一种Java专用的XML解析器,它构建了一个Java的文档对象模型(DOM),兼具DOM、SAX的优点。
下面是一个使用JDOM解析形如上文的xml文件的例子:
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
File xmlFile = new File("students.xml");
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(xmlFile);
Element rootNode = document.getRootElement();
List<Element> students = rootNode.getChildren("student");
for (Element student : students) {
System.out.println("Name: " + student.getChildText("name"));
System.out.println("Age: " + student.getChildText("age"));
}
方法四:使用DOM4J
DOM4J是一个Java的DOM/XML解析器,可以直接获取XPath表达式内容,它内置了JAXP中的XPath引擎,在解析XML时有着更好的表现。
下面是一个使用DOM4J解析形如上文的xml文件的例子:
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
File xmlFile = new File("students.xml");
SAXReader reader = new SAXReader();
Document document = reader.read(xmlFile);
List<Node> nodes = document.selectNodes("//student");
for (Node node : nodes) {
Element student = (Element) node;
System.out.println("Name: " + student.elementText("name"));
System.out.println("Age: " + student.elementText("age"));
}
小结
本文介绍了Java解析XML的四种方法,分别是使用DOM、SAX、JDOM和DOM4J。通过这四种方式,可以根据具体需求选择使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java解析xml的四种方法汇总 - Python技术站