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, поэтому я не могу вам это проконсультировать.

Другие вопросы по тегам