3.9. Moving nodes
Last updated: 25 January 2013.
This tutorial will show you how to move nodes within a JDOM document.
Using JDOM, you can easily move a node and all of its descendants from one location to another. Once again, let's use the file hotel.xml shown below:
<?xml version="1.0"?>
<HOTEL>
<ROOM>
<NUMBER>17</NUMBER>
<CATEGORY>STANDARD</CATEGORY>
<BED>DOUBLE SIZE</BED>
<FLOOR>5</FLOOR>
<LIVING_ROOM/>
<KITCHENETTE/>
<AIR_CONDITIONING>
<TABLE_FANS>2</TABLE_FANS>
</AIR_CONDITIONING>
</ROOM>
<ROOM>
<NUMBER>33</NUMBER>
<CATEGORY>SUITE</CATEGORY>
<BED>DOUBLE SIZE</BED>
<BED>KING SIZE</BED>
<FLOOR>9</FLOOR>
<LIVING_ROOM>17 FEET * 13 FEET</LIVING_ROOM>
<KITCHENETTE>10 FEET * 8 FEET</KITCHENETTE>
<JACUZZI>3 SEATS</JACUZZI>
<AIR_CONDITIONING>
<AIR_CONDITIONERS>5</AIR_CONDITIONERS>
</AIR_CONDITIONING>
</ROOM>
</HOTEL>
<HOTEL>
<ROOM>
<NUMBER>17</NUMBER>
<CATEGORY>STANDARD</CATEGORY>
<BED>DOUBLE SIZE</BED>
<FLOOR>5</FLOOR>
<LIVING_ROOM/>
<KITCHENETTE/>
<AIR_CONDITIONING>
<TABLE_FANS>2</TABLE_FANS>
</AIR_CONDITIONING>
</ROOM>
<ROOM>
<NUMBER>33</NUMBER>
<CATEGORY>SUITE</CATEGORY>
<BED>DOUBLE SIZE</BED>
<BED>KING SIZE</BED>
<FLOOR>9</FLOOR>
<LIVING_ROOM>17 FEET * 13 FEET</LIVING_ROOM>
<KITCHENETTE>10 FEET * 8 FEET</KITCHENETTE>
<JACUZZI>3 SEATS</JACUZZI>
<AIR_CONDITIONING>
<AIR_CONDITIONERS>5</AIR_CONDITIONERS>
</AIR_CONDITIONING>
</ROOM>
</HOTEL>
I am simply going to move the JACUZZI node from the second ROOM node to the first one by calling the methods detach and addContent provided by the class Element:
import java.io.File;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
public final class JDOMDemo {
private void moveElement(){
try {
// Read the XML file and get a JDOM document
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(new File("hotel.xml"));
// Get the root element
Element rootElement = document.getRootElement();
// Get the JACUZZI element
List<Element> children = rootElement.getChildren();
Element jacuzzi = children.get(1).getChild("JACUZZI");
// Move the JACUZZI element to the first ROOM element
jacuzzi.detach();
children.get(0).addContent(jacuzzi);
// Output the JDOM document to the standard output
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
outputter.output(document, System.out);
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args){
new JDOMDemo().moveElement();
}
}
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
public final class JDOMDemo {
private void moveElement(){
try {
// Read the XML file and get a JDOM document
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(new File("hotel.xml"));
// Get the root element
Element rootElement = document.getRootElement();
// Get the JACUZZI element
List<Element> children = rootElement.getChildren();
Element jacuzzi = children.get(1).getChild("JACUZZI");
// Move the JACUZZI element to the first ROOM element
jacuzzi.detach();
children.get(0).addContent(jacuzzi);
// Output the JDOM document to the standard output
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
outputter.output(document, System.out);
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args){
new JDOMDemo().moveElement();
}
}
Here is the result:
<?xml version="1.0"?>
<HOTEL>
<ROOM>
<NUMBER>17</NUMBER>
<CATEGORY>STANDARD</CATEGORY>
<BED>DOUBLE SIZE</BED>
<FLOOR>5</FLOOR>
<LIVING_ROOM/>
<KITCHENETTE/>
<AIR_CONDITIONING>
<TABLE_FANS>2</TABLE_FANS>
</AIR_CONDITIONING>
<JACUZZI>3 SEATS</JACUZZI>
</ROOM>
<ROOM>
<NUMBER>33</NUMBER>
<CATEGORY>SUITE</CATEGORY>
<BED>DOUBLE SIZE</BED>
<BED>KING SIZE</BED>
<FLOOR>9</FLOOR>
<LIVING_ROOM>17 FEET * 13 FEET</LIVING_ROOM>
<KITCHENETTE>10 FEET * 8 FEET</KITCHENETTE>
<AIR_CONDITIONING>
<AIR_CONDITIONERS>5</AIR_CONDITIONERS>
</AIR_CONDITIONING>
</ROOM>
</HOTEL>
<HOTEL>
<ROOM>
<NUMBER>17</NUMBER>
<CATEGORY>STANDARD</CATEGORY>
<BED>DOUBLE SIZE</BED>
<FLOOR>5</FLOOR>
<LIVING_ROOM/>
<KITCHENETTE/>
<AIR_CONDITIONING>
<TABLE_FANS>2</TABLE_FANS>
</AIR_CONDITIONING>
<JACUZZI>3 SEATS</JACUZZI>
</ROOM>
<ROOM>
<NUMBER>33</NUMBER>
<CATEGORY>SUITE</CATEGORY>
<BED>DOUBLE SIZE</BED>
<BED>KING SIZE</BED>
<FLOOR>9</FLOOR>
<LIVING_ROOM>17 FEET * 13 FEET</LIVING_ROOM>
<KITCHENETTE>10 FEET * 8 FEET</KITCHENETTE>
<AIR_CONDITIONING>
<AIR_CONDITIONERS>5</AIR_CONDITIONERS>
</AIR_CONDITIONING>
</ROOM>
</HOTEL>
You are here :
JavaPerspective.com >
Advanced Tutorials >
3. XML processing with JDOM >
3.9. Moving nodes
Next tutorial : JavaPerspective.com > Advanced Tutorials > 3. XML processing with JDOM > 3.10. Duplicating nodes
Next tutorial : JavaPerspective.com > Advanced Tutorials > 3. XML processing with JDOM > 3.10. Duplicating nodes