Here is the input text file that we need to modify −
<?xml version = "1.0" encoding = "UTF-8" standalone = "no"?> <cars> <supercars company = "Ferrari"> <carname type = "formula one">Ferrari 101</carname> <carname type = "sports">Ferrari 202</carname> </supercars> <luxurycars company = "Benteley"> <carname>Benteley 1</carname> <carname>Benteley 2</carname> <carname>Benteley 3</carname> </luxurycars> </cars>
import java.io.File; import java.io.IOException; import java.util.List; import org.jdom2.Attribute; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOMException; import org.jdom2.input.SAXBuilder; import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; public class ModifyXMLFileDemo { public static void main(String[] args) { try { File inputFile = new File("input.txt"); SAXBuilder saxBuilder = new SAXBuilder(); Document document = saxBuilder.build(inputFile); Element rootElement = document.getRootElement(); //get first supercar Element supercarElement = rootElement.getChild("supercars"); // update supercar attribute Attribute attribute = supercarElement.getAttribute("company"); attribute.setValue("Lamborigini"); // loop the supercar child node List<Element> list = supercarElement.getChildren(); for (int temp = 0; temp < list.size(); temp++) { Element carElement = list.get(temp); if("Ferrari 101".equals(carElement.getText())) { carElement.setText("Lamborigini 001"); } if("Ferrari 202".equals(carElement.getText())) { carElement.setText("Lamborigini 002"); } } //get all supercars element List<Element> supercarslist = rootElement.getChildren(); for (int temp = 0; temp < supercarslist.size(); temp++) { Element tempElement = supercarslist.get(temp); if("luxurycars".equals(tempElement.getName())) { rootElement.removeContent(tempElement); } } XMLOutputter xmlOutput = new XMLOutputter(); // display xml xmlOutput.setFormat(Format.getPrettyFormat()); xmlOutput.output(document, System.out); } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
This would produce the following result −
<?xml version = "1.0" encoding = "UTF-8"?> <cars> <supercars company = "Lamborigini"> <carname type = "formula one">Lamborigini 001</carname> <carname type = "sports">Lamborigini 002</carname> </supercars> </cars>