使用Java删除XML节点

时间:2014-10-17 13:04:00

标签: java xml xquery

我想基于jQuery结果从XML中删除XML节点。我有这样的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>

我想删除名称等于'james'的完整<member>标记,以便XML看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
    <list>

        <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>

我使用以下代码来获取节点并删除它,但获取相同的XML作为输出。它不是删除XML节点而是提供相同的XML。

那么,如何使用xQuery并从XML中删除XML节点?

1 个答案:

答案 0 :(得分:1)

我使用XMLBeam执行此类操作:

public class RemoveNode {
    public interface Projection {
    @XBDelete("/list/member[@name='{0}']")
    Projection removeMember(String name);
}

    public void main(String[] args) {
    Projection projection = new XBProjector(Flags.TO_STRING_RENDERS_XML).io.file("yourfile.xml").read(projection.class);
    System.out.println("Before:"+projection);
    System.out.println("After:"+projection.removeMember("james");
    }
}

不确定从文件中读取XML是否符合您的设置。但是有几种方法可以创建投影(来自IOStream,Resources,DOM Nodes,Strings ......)