Мне нужно сделать 2 вещи.Получить точный xpath из общего xpath
- Проверьте значение узла в файле XML.
Если значение соответствует, мне нужно его изменить.
У меня уже есть сложная иерархия объекта, выполняющего эту работу. Теперь я столкнулся с проблемой. Давайте посмотрим на пример:
<staticTag> <randomTag> <anotherRandomTag> <staticTag property="id"> <staticTag> VALUE </staticTag> </staticTag> </anotherRandomTag> </randomTag> </staticTag>
Это произойдет п раз в каждом XMLFILE я должен разобрать. Было бы легко с
//staticTag[@property='id']/staticTag/text()
Да, он вернет мне все значение, которое мне нужно проверить. Проблема в том, что у меня нет точного xpath для изменения значения, если оно соответствует значению, которое я ищу.
При необходимости я могу отправить образец кода. Итак, tl; dr: Есть ли способ генерировать точный xpath из общего? Как обычно, спасибо за ваше время.
Я сделал еще несколько testHere фиктивного XML
<tag>
<ZDSJG>
<SJROT>X66P1</SJROT>
</ZDSJG>
<DNLVZ>
<SJROT>VV1EZ</SJROT>
</DNLVZ>
</tag>
Моего Xpath XPression, что я ищу это //SJROT
С функцией я написал, я могу генерировать эту XPATH из первого узла: /#document/tag/ZDSJG/SJROT/#text
К сожалению, выражение xpath //SJROT
не возвращает мне второй узел, у которого есть это имя. Вот фрагмент кода, который ищет выражения Xpath при условии
XPathExpression expression = xpath.compile(expressionXPath);
NodeList result = (NodeList) expression.evaluate(document, XPathConstants.NODE);
List<String> generatedXpath = Lists.newArrayList();
for (int i = 0; i < result.getLength(); i++) {
generatedXpath.add(getXPath(result.item(i)));
}
return generatedXpath;
Другое редактирование: Я установил свой код, я должен был использовать NODESET
вместо NODE
не будет никаких попыток произвести соответствующую XPATH
Почему бы не использовать '' staticTag [@ property = 'id'] "', без ведущего '/'? - ваш самый верхний тег не будет соответствовать, потому что у него нет этого атрибута. – gaborsch
У меня есть этот узор N раз. В том же файле XML. И мне не нужно менять все эти экземпляры N. Просто, если значение соответствует другому в памяти. – drgn
Я думаю, вам нужно поймать средний '' с атрибутом (я полагаю, нет других узлов с атрибутом 'property =" id "') - можете ли вы это сделать? У нас нет информации о вашем XML. –
gaborsch