簡書著作權歸作者所有赠法,任何形式的轉載都請聯(lián)系作者獲得授權并注明出處官研。
使用工具: SAXBuilder
依賴:
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>2.0.3</version>
</dependency>
? ? ? ?通俗來說,解析 xml 文件的意思就是對于給定的 .xml 格式的文件厘贼,通過程序取出 xml 文件中我們想要的內(nèi)容峭咒。
? ? ? ?下面我們通過具體實例來演示一下如何通過 java 使用 SAXBuilder 來解析 xml 文件。
? ? ? ?假設 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>
? ? ? ?這里我自己引入了一個 “塊” 的概念來簡單地形容 xml 文件的結構据忘,雖然不準確鹦牛,但能夠方便我們溝通。xml 文件中的 “塊” 一般是指由一個開始標簽和一個結束標簽括起來的部分勇吊,如上述 xml 文件中的 class 塊和 student 塊曼追,另外還包含 firstname 塊、lastname 塊汉规、nickname 塊和 marks 塊礼殊。
? ? ? ?java 在使用 SAXBuilder 解析 xml 文件時,每個 “塊” 都用 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());
// 每個 xml 文件都只有一個 root 塊
// 上面的 xml 文件對應的 root 塊就是 class 塊
Element classElement = document.getRootElement();
// getChildren() 方法只得到兒子啄枕,不得到孫子和曾孫子等
// 所以這里得到的是三個 student 塊
List<Element> studentList = classElement.getChildren();
System.out.println("----------------------------");
// 遍歷三個 student 塊
for (int i = 0; i < studentList.size(); i++) {
Element student = studentList.get(i);
System.out.println("\nCurrent Element :" + student.getName());
// 注意這里用的不是 Element 婚陪,而是 Attribute
// 這是因為在該 xml 文件中 rollno 對應的不是 “塊”,而是一個屬性
Attribute attribute = student.getAttribute("rollno");
System.out.println("Student roll no : " + attribute.getValue() );
// 形象地來說频祝,xml 文件是由其中的各個 “塊” 組成的樹狀結構泌参,每個 “塊” 都是
// 樹的一個節(jié)點,當我們解析葉子節(jié)點時就可以使用下面的方式
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 使用實例(二)
下一篇:使用 Gson 實現(xiàn) Json 字符串和 Java 對象之間的相互轉換