Reputation: 55
I want to remove XML node from XML based on jQuery result. I have XML like this:
<?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>
I want to remove complete <member>
tag whose name is equal to 'james' so that XML should look like this
<?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>
I am using following code to get node and delete it but getting same XML as an output. It is not deleting XML node instead giving same XML.
So, how to use xQuery and remove XML node from XML?
Upvotes: 0
Views: 119
Reputation: 2312
I do things like this with 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");
}
}
Not sure if reading the XML from a file meets your setup. But there are several ways to create projections (from IOStream, Resources, DOM Nodes, Strings...)
Upvotes: 1