XML知识点及解析XML
一:什么是XML?
1、概述
xml是可扩展标识语言,(Extensible Markup Language)就是开发者在符合xml命名规则的基础之上,可以根据自己的需求定义自己的标签。
2、作用
xml文件的作用:主要是用来存储数据、
3、解析办法
解析xml文件的方法:DOM、DOM4J、SAX
二:解析XML
首先准备一个xml文件,用于解析。
<?xml version="1.0" encoding="UTF-8" ?>
<Person>
<person person_id="p1">
<name>zs</name>
<age>18</age>
</person>
<person person_id="p2">
<name>ls</name>
<age>20</age>
</person>
<person person_id="p3">
<name>ww</name>
<age>20</age>
</person>
<person person_id="p4">
<name>zl</name>
<age>18</age>
</person>
</Person>
1、DOM解析XML
(1)文件目录如下

(2)编写java代码
java代码如下:
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
public class Demo {
public static void printNode(Node node) {
NamedNodeMap nodeMap = node.getAttributes();
for (int i = 0; i < nodeMap.getLength(); i++) {
Node e = nodeMap.item(i);
System.out.println(e.getNodeName() + " : " + e.getFirstChild().getNodeValue());
}
}
public static void main(String[] args) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
//扫描xml文件的路径
Document doc = builder.parse("src/person.xml");
//第一个父标签
NodeList nodeList = doc.getElementsByTagName("Person");
Element element = (Element) nodeList.item(0);
//获取所有person标签
NodeList nodeLists = element.getElementsByTagName("person");
for (int i = 0; i < nodeLists.getLength(); i++) {
Element e = (Element) nodeLists.item(i);
System.out.println("姓名: " + e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
printNode(e.getElementsByTagName("name").item(0));
System.out.println("年龄: " + e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());
System.out.println("===============================================");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意:xml标签与java代码中的对应关系,以及xml文件路径的写法是否正确。
2、DOM4J解析XML
(1)导入Dom4J.jar包(以dom4j-1.6.1.jar为例)
先是菜单栏上File------->Project Structure,然后:

选择jar包目录:

接着一直选ok即可。

此时包已经导入!

(2)编写java代码
java代码如下:
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.Iterator;
public class Demo {
public static void main(String[] args) throws DocumentException {
// 1、创建解析器
SAXReader reader = new SAXReader();
// 2、Document对象:通过解析器read方法获取
Document doc = reader.read("src/person.xml");
// 3、获取xml根节点
Element root = doc.getRootElement();
// 4、遍历解析子节点并打印
for (Iterator<Element> rootIter = root.elementIterator(); rootIter.hasNext(); ) {
Element studentElt = rootIter.next();
for (Iterator<Element> innerIter = studentElt.elementIterator(); innerIter.hasNext(); ) {
Element innerElt = innerIter.next();
String innerValue = innerElt.getStringValue();
System.out.println(innerValue);
}
System.out.println("===============================================");
}
}
}
3、SAX解析xml文件(适合xml文件大的)
(1)SAX方式:事件驱动,边读边写
(2)编写java代码
java代码如下 :
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class Demo {
public static void main(String[] args) {
try {
//创建解析器工厂
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
//创建解析器
SAXParser saxParser = saxParserFactory.newSAXParser();
//通过解析器的parser方法
saxParser.parse("src/person.xml", new MyDefaultHandler());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class MyDefaultHandler extends DefaultHandler {
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.print("<" + qName + ">");
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.print(new String(ch, start, length));
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.print("</" + qName + ">");
}
}
三:总结
(1)注意person.xml在java代码中路径(分有相对路径和绝对路径)的书写是否正确。
(2)xml文件的标签要和java代码中的相对应,注意大小写。
(3)前两者的结果为:

第三个的结果为:

(4)在用Dom4J解析xml文件时需要进行导包操作。(dom4j-1.6.1.jar已经上传CSDN,可以免费下载)。
楠哥-------一心想为IT行业添砖加瓦,却总是面向cv编程的程序员。
谢谢阅读,无误点赞,有误还望评论区指正。
本文介绍了XML的基本概念,包括其作为可扩展标记语言的用途。详细阐述了三种XML解析方法:DOM解析,DOM4J解析和SAX解析。DOM解析要求一次性加载整个XML文件,DOM4J解析提供了更方便的操作接口,而SAX解析适用于大型XML文件,采用事件驱动的方式。在使用这些解析方法时,需注意XML文件路径、标签匹配以及导包等问题。

809

被折叠的 条评论
为什么被折叠?



