gpt4 book ai didi

java - 使用 xPath 从 xml 文件创建 Java 对象

转载 作者:行者123 更新时间:2023-12-02 03:43:06 24 4
gpt4 key购买 nike

我有一个以下格式的 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);

关于java - 使用 xPath 从 xml 文件创建 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36621098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com