java 解析 xml 文件實(shí)例

簡書著作權(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)換

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容