如何从XPath中删除所有选定的节点?

Car*_*ven 7 java xml xpath

我使用以下xml和代码在Java中运行XPath:

<?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>
Run Code Online (Sandbox Code Playgroud)

码:

try {
    XPath xpath = XPathFactory.newInstance().newXPath();
    XPathExpression pathExpr = xpath.compile("/list/member/friendlist/friend[.='0003']");
} catch (XPathExpressionException e) {
Run Code Online (Sandbox Code Playgroud)

当然之后有更多的代码,但是我没有在这里粘贴,因为它认为它可能会更加混乱.

但我的想法是希望从所有成员的friendlist节点中选择具有ID 0003的所有朋友节点,然后将其从XML文件中删除.XPath通过选择值为0003的所有"朋友"节点来工作.我知道我可以使用XML Document对象的removeChild()方法.但问题是我如何直接删除所有这些,而不从其父级开始循环层?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();
}
Run Code Online (Sandbox Code Playgroud)

xmlDoc是一个XML文档对象,它解析了XML文件.XML工作正常.只有XML不返回引用而是返回一个全新的节点列表,这使我无法返回其原始的xml文档进行修改.

jta*_*orn 10

对于返回的NodeList中的每个节点:

n.getParentNode().removeChild(n);
Run Code Online (Sandbox Code Playgroud)