Как читать дочерний XML с помощью XPath в Java

#java #xml #xpath #soap #xml-parsing

#java #xml #xpath #soap #синтаксический анализ xml

Вопрос:

Файл XML выглядит следующим образом :

Xml-файл

Код, который я написал:

Запрос списка xmlusingxpathandreturnlist(строка xml, строка xpathExpression) {

DocumentBuilderFactory DbFactory = DocumentBuilderFactory.newInstance()

DocumentBuilder dBuilder = DbFactory.newDocumentBuilder()

Документ doc = dBuilder.parse(новый ByteArrayInputStream(xml.getBytes(стандартные наборы символов.UTF_8)))

doc.getDocumentElement().normalize()

XPath XPath = XPathFactory.newInstance().newXPath()

Список узлов Список узлов = (список узлов) XPath.compile(xpathExpression).evaluate(документ, XPathConstants.NODESET)

Список возвращаемых элементов = новый ArrayList<>()

NodeList.each { n ->

returnElements.add(n.getTextContent())

}

Когда я передаю xpath как:

/Envelope/Body/CommandResponseData/OperationResult/Operation/ParameterList/ListParameter/StringElement

Он возвращает все значения. Но я хочу возвращать только значения ListParameter, имя которых =»PackageTypeList».

Для этого я использую xpath как:

/Envelope/Body/CommandResponseData/OperationResult/Operation/ParameterList/ListParameter[@name=’PackageTypeList’]/StringElement

Но он возвращает list как null.

Комментарии:

1. Картинки бесполезны. Пожалуйста, отредактируйте свой пост и добавьте свой XML в виде текста.

Ответ №1:

Я думаю, вы пропустили «CommandResult» между «CommandResponseData» и «OperationResult» в вашем XPath-выражении.

Комментарии:

1. Кажется, я неправильно вставил его. Мой xpath: /Envelope/Body/CommandResponseData/CommandResult/OperationResult/Operation/ParameterList/ListParameter[@name=’PackageList’]/ StringElement по-прежнему получает нулевой ответ. Если я удалю [@name=’PackageList’] , я получу все значения, но, как я уже упоминал, мне нужны конкретные данные, имя которых =PackageList .