Я запускаю XPath на Java со следующим xml и кодом:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<member name="James">
<friendlist>
<friend>0001</friend>
<friend>0002</friend>
<friend>0003</friend>
</friendlist>
</member>
<member name="Jamie">
<friendlist>
<friend>0003</friend>
<friend>0002</friend>
<friend>0001</friend>
</friendlist>
</member>
<member name="Katie">
<friendlist>
<friend>0001</friend>
<friend>0003</friend>
<friend>0004</friend>
</friendlist>
</member>
</list>
Код:
try {
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression pathExpr = xpath.compile("/list/member/friendlist/friend[.='0003']");
} catch (XPathExpressionException e) {
Конечно, есть и другие коды после этого, но я не вставлял его сюда, потому что он думал, что это может запутать еще больше.
Но идея в том, что я хочу выбрать все узлы друзей с идентификатором 0003 из всех узлов списка друзей участников, а затем удалить это из файла XML. XPath работает, выбирая все «дружественные» узлы со значением = 0003. Я знаю, что могу использовать метод removeChild () объекта XML Document. Но проблема в том, как мне удалить все это напрямую, не проходя через слои циклов, начиная с его родителя? Метод removeChild () требует, чтобы я знал родителя его родителя.
Спасибо!
Обновление: Вот как я использовал свой XPath:
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression pathExpr = null;
try {
pathExpr = xpath.compile("/list/member/friendlist/friend[.='0003']");
} catch (XPathExpressionException e) {
e.printStackTrace();
}
NodeList list = null;
try {
list = (NodeList) pathExpr.evaluate(xmlDoc, XPathConstants.NODESET);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
xmlDoc - это объект XML-документа, который имеет проанализированный XML-файл. XML работает нормально. Только XML не возвращает ссылку, а полностью новый список узлов, что не позволяет мне вернуться к исходному XML-документу для внесения поправок.