簡體   English   中英

使用xPath從xml文件創建Java對象

[英]Create Java object from xml file with xPath

我有以下格式的xml文件:

<Employee>
    <EmployeeID>10</EmployeeID>
    <Name>David</Name>
    <Department>Service</Department>
</Employee>

我有一個很大的xml文件,只包含這種格式的員工。 我想要的是使用xPath從文件中選擇節點,然后為每個條目創建一個Java對象:

public class Employee {

String name; 
String department; 
int age; 

public int getAge() {
    return age; 
}

public void setAge(int age) {
    this.age = age; 
}

public String getName() {
    return name; 
}

public void setName(String name) {
    this.name = name; 
}

public String getDepartment() {
    return department; 
}

public void setDepartment(String department) {
    this.department = department; 
}

}

這是我到目前為止所擁有的。 我似乎無法弄清楚如何最好地檢索所需的所有信息並創建對象:

public void parseFile(String fileName) {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = null;
    Document document = null;

    try {
        builder = factory.newDocumentBuilder();
        document = builder.parse(new File(fileName));

        XPathFactory xPathFactory = XPathFactory.newInstance();
        XPath xPath = xPathFactory.newXPath();

        List<Employee> employees = getEmployeesFromXml(document, xPath); 

    } catch (SAXException e) {
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private List<Employee> getEmployeesFromXml(Document document, XPath xPath) {

    List<Employee> list = new ArrayList<Employee>();

    try {
        // Create an expression that retrieves the values from xml 
    } catch (XPathExpressionException e) {
        e.printStackTrace();
    }

    return null;
}

如果您不想解析XML並且對節點執行某些操作,而僅將它們轉換為Java對象,那么我建議看一下XMLBeam 這是一個不錯的框架,可以加載XML文件並根據為每個元素定義的XPath創建投影。

例如,這是投影的樣子:

public interface ProfileData {
    @XBRead("/root/personal_data/resultSet/firstname")
    String getFirstName();
    @XBRead("/root/personal_data/resultSet/surname")
    String getSurname();

    @XBRead("/root/personal_data/resultSet/core_areas")
    String getCoreAreas();

    interface Skill {
        @XBRead("skillname")
        String getName();
        @XBRead("skillval")
        String getExperience();
    }
    interface SkillSet {
        @XBRead("../gencatname")
        String getGenericCategory();
        @XBRead("catname")
        String getCategory();
        @XBRead("skill")
        List<Skill> getSkills();
    }

    @XBRead("/root/skills/tab/category")
    List<SkillSet> getSkillSets();
}

@XBRead批注定義了XPath收集元素的位置。

為了提取信息,您可以像這樣調用XMLBeam:

ProfileData profileData = new XBProjector().io().stream(yourXMLFileStream).read(ProfileData.class);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM