讀取 XML 檔案

為了使用 XOM 載入 XML 資料,你需要建立一個 Builder,你可以將其構建為 Document

Builder builder = new Builder();
Document doc = builder.build(file);

要獲取 xml 檔案中最高父元素的根元素,需要在 Document 例項上使用 getRootElement()

Element root = doc.getRootElement();

現在,Element 類有許多方便的方法,使得讀取 xml 非常容易。下面列出了一些最有用的內容:

  • getChildElements(String name) - 返回一個作為元素陣列的 Elements 例項
  • getFirstChildElement(String name) - 返回帶有該標記的第一個子元素。
  • getValue() - 返回元素內的值。
  • getAttributeValue(String name) - 返回具有指定名稱的屬性的值。

當你呼叫 getChildElements() 時,你會得到一個 Elements 例項。從這裡你可以迴圈並呼叫 get(int index) 方法來檢索裡面的所有元素。

Elements colors = root.getChildElements("color");
for (int q = 0; q < colors.size(); q++){
    Element color = colors.get(q);
}

示例: 以下是讀取 XML 檔案的示例:

XML 檔案:

StackOverflow 文件

閱讀和列印程式碼:

import java.io.File;
import java.io.IOException;
import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Element;
import nu.xom.Elements;
import nu.xom.ParsingException;

public class XMLReader {
    
    public static void main(String[] args) throws ParsingException, IOException{
        File file = new File("insert path here");
        // builder builds xml data
        Builder builder = new Builder();
        Document doc = builder.build(file);
        
        // get the root element <example>
        Element root = doc.getRootElement();
        
        // gets all element with tag <person>
        Elements people = root.getChildElements("person");
        
        for (int q = 0; q < people.size(); q++){
            // get the current person element
            Element person = people.get(q);
            
            // get the name element and its children: first and last
            Element nameElement = person.getFirstChildElement("name");
            Element firstNameElement = nameElement.getFirstChildElement("first");
            Element lastNameElement = nameElement.getFirstChildElement("last");
            
            // get the age element
            Element ageElement = person.getFirstChildElement("age");
            
            // get the favorite color element
            Element favColorElement = person.getFirstChildElement("fav_color");
            
            String fName, lName, ageUnit, favColor;
            int age;
            
            try {
                fName = firstNameElement.getValue();
                lName = lastNameElement.getValue();
                age = Integer.parseInt(ageElement.getValue());
                ageUnit = ageElement.getAttributeValue("unit");
                favColor = favColorElement.getValue();
                
                System.out.println("Name: " + lName + ", " + fName);
                System.out.println("Age: " + age + " (" + ageUnit + ")");
                System.out.println("Favorite Color: " + favColor);
                System.out.println("----------------");
                
            } catch (NullPointerException ex){
                ex.printStackTrace();
            } catch (NumberFormatException ex){
                ex.printStackTrace();
            }
        }
    }
    
}

這將在控制檯中列印出來:

Name: Smith, Dan
Age: 23 (years)
Favorite Color: greenName: Autry, Bob
Age: 3 (months)
Favorite Color: N/A```