簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。
使用工具: SAXBuilder
依賴:
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>2.0.3</version>
</dependency>
? ? ? ?通俗來說,解析 xml 文件的意思就是對于給定的 .xml 格式的文件,通過程序取出 xml 文件中我們想要的內(nèi)容。
? ? ? ?下面我們通過具體實(shí)例來演示一下如何通過 java 使用 SAXBuilder 來解析 xml 文件。
? ? ? ?假設(shè) input.xml 文件的內(nèi)容如下:
<?xml version = "1.0"?>
<class>
<student rollno = "393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
? ? ? ?這里我自己引入了一個(gè) “塊” 的概念來簡單地形容 xml 文件的結(jié)構(gòu),雖然不準(zhǔn)確,但能夠方便我們溝通。xml 文件中的 “塊” 一般是指由一個(gè)開始標(biāo)簽和一個(gè)結(jié)束標(biāo)簽括起來的部分,如上述 xml 文件中的 class 塊和 student 塊,另外還包含 firstname 塊、lastname 塊、nickname 塊和 marks 塊。
? ? ? ?java 在使用 SAXBuilder 解析 xml 文件時(shí),每個(gè) “塊” 都用 Element 來表示,這在下面的代碼中有所體現(xiàn)。
? ? ? ?現(xiàn)在我們要解析上述 xml 文件的內(nèi)容,并在控制臺上輸出如下的信息:
Root element :class
----------------------------
Current Element :student
Student roll no : 393
First Name : dinkar
Last Name : kad
Nick Name : dinkar
Marks : 85
Current Element :student
Student roll no : 493
First Name : Vaneet
Last Name : Gupta
Nick Name : vinni
Marks : 95
Current Element :student
Student roll no : 593
First Name : jasvir
Last Name : singn
Nick Name : jazz
Marks : 90
? ? ? ?下面開始展示具體代碼:
public class XmlParser {
public static void main(String[] args) {
try {
File inputFile = new File("input.xml");
SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build(inputFile);
System.out.println("Root element :" + document.getRootElement().getName());
// 每個(gè) xml 文件都只有一個(gè) root 塊
// 上面的 xml 文件對應(yīng)的 root 塊就是 class 塊
Element classElement = document.getRootElement();
// getChildren() 方法只得到兒子,不得到孫子和曾孫子等
// 所以這里得到的是三個(gè) student 塊
List<Element> studentList = classElement.getChildren();
System.out.println("----------------------------");
// 遍歷三個(gè) student 塊
for (int i = 0; i < studentList.size(); i++) {
Element student = studentList.get(i);
System.out.println("\nCurrent Element :" + student.getName());
// 注意這里用的不是 Element ,而是 Attribute
// 這是因?yàn)樵谠?xml 文件中 rollno 對應(yīng)的不是 “塊”,而是一個(gè)屬性
Attribute attribute = student.getAttribute("rollno");
System.out.println("Student roll no : " + attribute.getValue() );
// 形象地來說,xml 文件是由其中的各個(gè) “塊” 組成的樹狀結(jié)構(gòu),每個(gè) “塊” 都是
// 樹的一個(gè)節(jié)點(diǎn),當(dāng)我們解析葉子節(jié)點(diǎn)時(shí)就可以使用下面的方式
System.out.println("First Name : " + student.getChild("firstname").getText());
System.out.println("Last Name : " + student.getChild("lastname").getText());
System.out.println("Nick Name : " + student.getChild("nickname").getText());
System.out.println("Marks : " + student.getChild("marks").getText());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
上一篇:規(guī)則引擎 Easy Rules 使用實(shí)例(二)
下一篇:使用 Gson 實(shí)現(xiàn) Json 字符串和 Java 對象之間的相互轉(zhuǎn)換