Я запускаю 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-документа.Но проблема в том, как мне удалить все это напрямую, не проходя слои циклов, начиная с его родителя?Метод 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();
}
объект документа XML, для которого проанализирован файл XML.XML работает нормально.Только XML не возвращает ссылку, а целый новый список узлов, что делает невозможным возвращение к исходному XML-документу для внесения изменений.