JXPath getValue также включает результаты предыдущих поисков
Я использую JXPathContext для поиска через объект Java с использованием XPath. У меня есть следующий код. У отдела класса есть коллекция сотрудников.
public List<Employee> getEmployeesByDepartment(String departmentName, Company company){
JXPathContext context = JXPathContext.newContext(company);
context.setLenient(true);
@SuppressWarnings("unchecked")
List<Employee> employees = (List<Employee>) context
.getValue("/company[department/name ='"+departmentName+"']/department/employee");
return employees;
}
Например, я делаю первый звонок для отдела кадров, а затем второй звонок для счетов. Список, возвращаемый после второго звонка, будет содержать сотрудников из Бухгалтерии, а также из отдела кадров.
1 ответ
Ваш XPath выбирает всех сотрудников во всех отделах во всех компаниях, в которых есть отдел с указанным именем. Это будет происходить во всех поисках, а не только позже. Чтобы выбрать только сотрудников в названном отделе:
"/company/department[name ='" + departmentName + "']/employee"
Возможно, вам также нужен предикат названия компании, но я не знаю, как выглядит ваш xml, поэтому я не могу вам это проконсультировать.