[英]create basic line breaks with an Xpath Expression from Java to XML file
[英]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.