Я читаю XML, используя dom4j, используя методы XPath для выбора нужных узлов.Учтите, что мой XML выглядит следующим образом:
<Emp_Dir>
<Emp_Classification type ="Permanent" >
<Emp id= "1">
<name>jame</name>
<Emp_Bio>
<age>12</age>
<height>5.4</height>
<weight>78</weight>
</Emp_Bio>
<Empployment_History>
<job>
<salary>2000</salary>
<designation>senior developer</designation>
<duration>2years</duration>
</job>
<job>
<salary>1000</salary>
<designation>developer</designation>
<duration>3years</duration>
</job>
</Empployment_History>
</Emp>
.
.
.
</Emp_Classification>
<Emp_Classification type ="Contract" >
.
.
.
</Emp_Classification>
<Emp_Classification type ="PartTime" >
.
.
.
</Emp_Classification>
</Emp_Dir>
Примечание. Приведенный выше XML может показаться вам уродливым, но я создаю этот фиктивный файл только для понимания и сохранения секретности моего проекта
Моя желаемая цель - получить историю занятости каждого постоянного сотрудника, для этого мне удалось получить все узлы «Emp» постоянных сотрудников, используя следующую XPath Epression:
//Emp_Dir/Emp_Classification[@type='Permanent']/Emp
Код, который получаети хранить узлы выглядит следующим образом:
List<? extends Node> lstprmntEmps = document.selectNodes("//Emp_Dir/Emp_Classification/[@type='Permanent']/Emp");
ArrayList<Employee> Employees = new ArrayList<Employee>();//Employee is my custom class
for (Node node : lstprmntEmps)
{
Employees.add(ParseEmployee(node));//ParseEmployee(. . .) is my custom function that pareses emp XML and return Employee object
}
Теперь я хочу задать следующие три вопроса:
- Как получить атрибут ID каждого сотрудника?
- Как мне получить элемент имени каждого сотрудника?
- Последний, но самый важный вопрос: какой XPath мне нужно указать, чтобы получить узел Job каждого сотрудника?Я попытался выполнить следующее, но безуспешно: (
node.selectNodes ("/ Emp / Empployment_History / job"); // это возвращает ноль узлов (или) node.selectNodes ("// Emp/ Empployment_History / job "); // это возвращает больше ожидаемых узлов