Java Tutorial/XML/DOM Edit

Материал из Java эксперт
Перейти к: навигация, поиск

Adding a New Entry to the End of a List

   <source lang="java">

/* Code revised from Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002

  • /

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     append(doc, "newName", "1111111111", "newEmail");
     
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void append(Document doc, String name, String phone, String email) {
   Element personNode = doc.createElement("person");
   Element nameNode = doc.createElement("name");
   personNode.appendChild(nameNode);
   Text nametextNode = doc.createTextNode(name);
   nameNode.appendChild(nametextNode);
   Element phoneNode = doc.createElement("phone");
   personNode.appendChild(phoneNode);
   Text phonetextNode = doc.createTextNode(phone);
   phoneNode.appendChild(phonetextNode);
   Element emailNode = doc.createElement("email");
   personNode.appendChild(emailNode);
   Text emailtextNode = doc.createTextNode(email);
   emailNode.appendChild(emailtextNode);
   Element root = doc.getDocumentElement();
   root.appendChild(personNode);
 }
 
 
 
 
 
 
 
 
 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}

//File: personWithDTD.xml <?xml version="1.0" standalone="yes"?>

<!DOCTYPE folks [ <!ELEMENT folks (person)*> <!ELEMENT person (name, phone, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> <folks>

   <person>
       <name>B D</name>
       <phone>999 555-8888</phone>
       <email>b@xyz.net</email>
   </person>

</folks></source>



<?xml version="1.0" standalone="yes"?>
<folks>
    <person>
        <name>
            B D
        </name>
        <phone>
            999 555-8888
        </phone>
        <email>
            b@xyz.net
        </email>
    </person>
    <person>
        <name>
            newName
        </name>
        <phone>
            1111111111
        </phone>
        <email>
            newEmail
        </email>
    </person>
</folks>


A Method for Inserting a New Entry in a List

   <source lang="java">

/* Code revised from Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002

  • /

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     insert(doc, "newName", "1111111111", "newEmail");
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void insert(Document doc, String name, String phone, String email) {
   Element personNode = doc.createElement("person");
   Element nameNode = doc.createElement("name");
   personNode.appendChild(nameNode);
   Text nametextNode = doc.createTextNode(name);
   nameNode.appendChild(nametextNode);
   Element phoneNode = doc.createElement("phone");
   personNode.appendChild(phoneNode);
   Text phonetextNode = doc.createTextNode(phone);
   phoneNode.appendChild(phonetextNode);
   Element emailNode = doc.createElement("email");
   personNode.appendChild(emailNode);
   Text emailtextNode = doc.createTextNode(email);
   emailNode.appendChild(emailtextNode);
   Element root = doc.getDocumentElement();
   Node firstChildNode = root.getFirstChild();
   root.insertBefore(personNode, firstChildNode);
 }
 
 
 
 
 
 
 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}</source>



<?xml version="1.0" standalone="yes"?>
<folks>
    <person>
        <name>
            newName
        </name>
        <phone>
            1111111111
        </phone>
        <email>
            newEmail
        </email>
    </person>
    <person>
        <name>
            B D
        </name>
        <phone>
            999 555-8888
        </phone>
        <email>
            b@xyz.net
        </email>
    </person>
</folks>


Changing the Name of a DOM Element

   <source lang="java">

import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; public class Main {

 public static void main(String[] argv) throws Exception {
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   factory.setValidating(true);
   factory.setExpandEntityReferences(false);
   Document doc = factory.newDocumentBuilder().parse(new File("filename"));
   Element element = doc.getDocumentElement();
   Element element2 = doc.createElement("newname");
   NamedNodeMap attrs = element.getAttributes();
   for (int i = 0; i < attrs.getLength(); i++) {
     Attr attr2 = (Attr) doc.importNode(attrs.item(i), true);
     element2.getAttributes().setNamedItem(attr2);
   }
   while (element.hasChildNodes()) {
     element2.appendChild(element.getFirstChild());
   }
   element.getParentNode().replaceChild(element2, element);
 }

}</source>





Create Document with root QName

   <source lang="java">

/*

* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common
* Development and Distribution License("CDDL") (collectively, the
* "License"). You may not use this file except in compliance with the
* License. You can obtain a copy of the License at
* http://www.netbeans.org/cddl-gplv2.html
* or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
* specific language governing permissions and limitations under the
* License.  When distributing the software, include this License Header
* Notice in each file and include the License file at
* nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the GPL Version 2 section of the License file that
* accompanied this code. If applicable, add the following below the
* License Header, with the fields enclosed by brackets [] replaced by
* your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
*
* Contributor(s):
*
* The Original Software is NetBeans. The Initial Developer of the Original
* Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
* Microsystems, Inc. All Rights Reserved.
*
* If you wish your version of this file to be governed by only the CDDL
* or only the GPL Version 2, indicate your decision by adding
* "[Contributor] elects to include this software in this distribution
* under the [CDDL or GPL Version 2] license." If you do not indicate a
* single choice of license, a recipient has the option to distribute
* your version of this file under either the CDDL, the GPL Version 2 or
* to extend the choice of license to its licensees as provided above.
* However, if you add GPL Version 2 code and therefore, elected the GPL
* Version 2 license, then the option applies only if the new code is
* made subject to such option by the copyright holder.
*/

import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.DOMException; import org.w3c.dom.Document; /**

* Utility class collecting library methods related to XML processing. Stolen
* from nbbuild/antsrc and openide/.../xml.
* 
* @author Petr Kuzel, Jesse Glick
*/

public final class XMLUtil {

 public static Document createDocument(String rootQName) throws DOMException {
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     try {
         return factory.newDocumentBuilder ().getDOMImplementation ().createDocument (null, rootQName, null);
     } catch (ParserConfigurationException ex) {
         throw (DOMException)new DOMException(DOMException.NOT_SUPPORTED_ERR, "Cannot create parser").initCause(ex); // NOI18N
     }
 }

}</source>





Create New Container

   <source lang="java">

import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /*******************************************************************************

* Copyright (C) 2007 Google Inc.
* 
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
* 
* http://www.apache.org/licenses/LICENSE-2.0
* 
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
******************************************************************************/

/**

* Various XML utilities.
* 
* @author simonjsmith, ksim
* @version 1.1 - ksim - March 6th, 2007 - Added functions regarding streaming
* @version 1.2 - ksim - March 10th, 2007 - Added functions regarding DOM
*          manipulation
*/

public class Utils {

 public static Element createNewContainer(Document document, Element parent,
     String childElement) {
   Element child = (Element) document.createElement(childElement);
   parent.appendChild(child);
   return child;
 }

}</source>





Creating an XML Document from a DOM Tree

   <source lang="java">

/* Code revised from Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002

  • /

import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMCopy {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}

//File: personWithDTD.xml <?xml version="1.0" standalone="yes"?>

<!DOCTYPE folks [ <!ELEMENT folks (person)*> <!ELEMENT person (name, phone, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> <folks>

   <person>
       <name>B D</name>
       <phone>999 555-8888</phone>
       <email>b@xyz.net</email>
   </person>

</folks></source>



<?xml version="1.0" standalone="yes"?>
<folks>
    <person>
        <name>
            B D
        </name>
        <phone>
            999 555-8888
        </phone>
        <email>
            b@xyz.net
        </email>
    </person>
</folks>


Deleting an Attribute

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     delAttribute(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void delAttribute(Document doc) {
   Element root = doc.getDocumentElement();
   Element person = (Element)root.getFirstChild();
   person.removeAttribute("number");
   person.removeAttribute("dept");
 }







 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}

//File: personWithDTD.xml <?xml version="1.0" standalone="yes"?>

<!DOCTYPE folks [ <!ELEMENT folks (person)*> <!ELEMENT person (name, phone, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ATTLIST person number CDATA #IMPLIED

                dept CDATA "staff">

]> <folks>

   <person number="3412" dept="medical">
       <name>B D</name>
       <phone>999 555-8888</phone>
       <email>b@xyz.net</email>
   </person>

</folks></source>



<?xml version="1.0" standalone="yes"?>
<folks>
    <person dept="staff">
        <name>
            B D
        </name>
        <phone>
            999 555-8888
        </phone>
        <email>
            b@xyz.net
        </email>
    </person>
</folks>


Deleting a Tree Node

   <source lang="java">

/* Code revised from Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002

  • /

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     deleteFirstElement(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void deleteFirstElement(Document doc) {
   Element root = doc.getDocumentElement();
   Element child = (Element)root.getFirstChild();
   root.removeChild(child);
 }






 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}

//File: personWithDTD.xml <?xml version="1.0" standalone="yes"?>

<!DOCTYPE folks [ <!ELEMENT folks (person)*> <!ELEMENT person (name, phone, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> <folks>

   <person>
       <name>B D</name>
       <phone>999 555-8888</phone>
       <email>b@xyz.net</email>
   </person>

</folks></source>





Duplicating a Portion of the Tree

   <source lang="java">

/* Code revised from Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002

  • /

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     duplicatePerson(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void duplicatePerson(Document doc) {
   Element root = doc.getDocumentElement();
   Element origPerson = (Element)root.getFirstChild();
   Element newPerson = (Element)origPerson.cloneNode(true);
   root.appendChild(newPerson);
 }







 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}

//File: personWithDTD.xml <?xml version="1.0" standalone="yes"?>

<!DOCTYPE folks [ <!ELEMENT folks (person)*> <!ELEMENT person (name, phone, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> <folks>

   <person>
       <name>B D</name>
       <phone>999 555-8888</phone>
       <email>b@xyz.net</email>
   </person>

</folks></source>



<?xml version="1.0" standalone="yes"?>
<folks>
    <person>
        <name>
            B D
        </name>
        <phone>
            999 555-8888
        </phone>
        <email>
            b@xyz.net
        </email>
    </person>
    <person>
        <name>
            B D
        </name>
        <phone>
            999 555-8888
        </phone>
        <email>
            b@xyz.net
        </email>
    </person>
</folks>


Editing by Using a Document Fragment: Creating a DocumentFragment Subtree and Appending to the Document

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentFragment; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     addFragment(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void addFragment(Document doc) {
   Element person;
   Element root = doc.getDocumentElement();
   DocumentFragment fragment = doc.createDocumentFragment();
   person = makePersonNode(doc,"Name 1","555-4444");
   fragment.appendChild(person);
   person = makePersonNode(doc,"Name 2","555-9999");
   fragment.appendChild(person);
   root.appendChild(fragment);
 }
 private static Element makePersonNode(Document doc,String name,String phone) {
   Element nameNode = doc.createElement("name");
   Text nametextNode = doc.createTextNode(name);
   nameNode.appendChild(nametextNode);
   Element phoneNode = doc.createElement("phone");
   Text phonetextNode = doc.createTextNode(phone);
   phoneNode.appendChild(phonetextNode);
   
   Element personNode = doc.createElement("person");
   personNode.appendChild(nameNode);
   personNode.appendChild(phoneNode);
   return(personNode);
 }








 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

} //File: persionWithDTD.xml <?xml version="1.0" standalone="yes"?> <!DOCTYPE locations [ <!ELEMENT locations (place)*> <!ELEMENT place (name | directions)*> <!ELEMENT name (#PCDATA)> <!ELEMENT directions (#PCDATA)> ]> <locations>

   <place>
       <name>oldName</name>
       <directions>oldDirection</directions>
   </place>

</locations></source>



<?xml version="1.0" standalone="yes"?>
<locations>
    <place>
        <name>
            oldName
        </name>
        <directions>
            oldDirection
        </directions>
    </place>
    <person>
        <name>
            Fred
        </name>
        <phone>
            555-4927
        </phone>
    </person>
    <person>
        <name>
            Sam
        </name>
        <phone>
            555-9832
        </phone>
    </person>
</locations>


Editing the Text of a Node

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     modifyTextByReplacement(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void modifyTextByReplacement(Document doc) {
   Element root = doc.getDocumentElement();
   Element place = (Element)root.getFirstChild();
   Text name = (Text)place.getFirstChild().getFirstChild();
   Text directions = (Text)place.getLastChild().getFirstChild();
   name.setData("newName");
   directions.setData("newDirection");
 }








 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}</source>



<?xml version="1.0" standalone="yes"?>
<locations>
    <place>
        <name>
            newName
        </name>
        <directions>
            newDirection
        </directions>
    </place>
</locations>


Edit Text by Insertion and Replacement

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     editTextbyInsertionandReplacement(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void editTextbyInsertionandReplacement(Document doc) {
   Element root = doc.getDocumentElement();
   Element place = (Element)root.getFirstChild();
   Text name = (Text)place.getFirstChild().getFirstChild();
   Text directions = (Text)place.getLastChild().getFirstChild();
   // Inserting the word "black"

// name.insertData(offset," black");

   name.insertData(3," black");
   // Replace "left" with "right"
   //directions.replaceData(offset,count,"right");
   directions.replaceData(3,3,"right");
 }








 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}

//File: personWithDTD.xml <?xml version="1.0" standalone="yes"?> <!DOCTYPE locations [ <!ELEMENT locations (place)*> <!ELEMENT place (name | directions)*> <!ELEMENT name (#PCDATA)> <!ELEMENT directions (#PCDATA)> ]> <locations>

   <place>
       <name>name</name>
       <directions>direction</directions>
   </place>

</locations></source>



<?xml version="1.0" standalone="yes"?>
<locations>
    <place>
        <name>
            old blackName
        </name>
        <directions>
            oldrightection
        </directions>
    </place>
</locations>


Inserting a CDATASection Node

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     addCDATA(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void addCDATA(Document doc) {
   Element root = doc.getDocumentElement();
   Element place = (Element)root.getFirstChild();
   Element directions = (Element)place.getLastChild();
   String dirtext = "cdData.";
   CDATASection dirdata = doc.createCDATASection(dirtext);
   directions.replaceChild(dirdata,directions.getFirstChild());
 }








 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

} //File: personWithDTD.xml <?xml version="1.0" standalone="yes"?> <!DOCTYPE locations [ <!ELEMENT locations (place)*> <!ELEMENT place (name | directions)*> <!ELEMENT name (#PCDATA)> <!ELEMENT directions (#PCDATA)> ]> <locations>

   <place>
       <name>name</name>
       <directions>direction</directions>
   </place>

</locations></source>



<?xml version="1.0" standalone="yes"?>
<locations>
    <place>
        <name>
            oldName
        </name>
        <directions>
        </directions>
    </place>
</locations>


Inserting a Processing Instruction and Comment

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentFragment; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     addComment(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void addComment(Document doc) {
   Element root = doc.getDocumentElement();
   Element folks = (Element)root.getLastChild();
   Comment comment = doc.createComment("Text of the comment");
   root.insertBefore(comment,folks);
 }









 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

} //File: persionWithDTD.xml <?xml version="1.0" standalone="yes"?> <!DOCTYPE locations [ <!ELEMENT locations (place)*> <!ELEMENT place (name | directions)*> <!ELEMENT name (#PCDATA)> <!ELEMENT directions (#PCDATA)> ]> <locations>

   <place>
       <name>oldName</name>
       <directions>oldDirection</directions>
   </place>

</locations></source>



<?xml version="1.0" standalone="yes"?>
<locations>
    <!-- Text of the comment -->
    <place>
        <name>
            oldName
        </name>
        <directions>
            oldDirection
        </directions>
    </place>
</locations>


Locating a Node and Modifying Text

   <source lang="java">

/* Code revised from Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002

  • /

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     newEmail(doc, "B D",  "newEmail");
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void newEmail(Document doc,String newname,String newemail) {
   Element root = doc.getDocumentElement();
   NodeList rootlist = root.getChildNodes();
   for(int i=0; i<rootlist.getLength(); i++) {
       Element person = (Element)rootlist.item(i);
       NodeList personlist = person.getChildNodes();
       Element name = (Element)personlist.item(0);
       NodeList namelist = name.getChildNodes();
       Text nametext = (Text)namelist.item(0);
       String oldname = nametext.getData();
       if(oldname.equals(newname)) {
           Element email = (Element)personlist.item(1);
           NodeList emaillist = email.getChildNodes();
           Text emailtext = (Text)emaillist.item(0);
           emailtext.setData(newemail);
       }
   }

}




 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}

//File: personWithDTD.xml <?xml version="1.0" standalone="yes"?>

<!DOCTYPE folks [ <!ELEMENT folks (person)*> <!ELEMENT person (name, phone, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> <folks>

   <person>
       <name>B D</name>
       <phone>999 555-8888</phone>
       <email>b@xyz.net</email>
   </person>

</folks></source>



<?xml version="1.0" standalone="yes"?>
<folks>
    <person>
        <name>
            B D
        </name>
        <phone>
            newEmail
        </phone>
        <email>
            b@xyz.net
        </email>
    </person>
</folks>


Locating a Node by an ID

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     findByID(doc, "B");
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void findByID(Document doc,String idName) {
   Element name = doc.getElementById(idName);
   if(name == null) {
       System.out.println("There is no element with the ID "
               + idName);
   } else {
       Text text = (Text)name.getFirstChild();
       System.out.println("The ID " + idName
               + " locates the name " + text.getData());
   }
 }








 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}</source>



The ID B locates the name BB


Locating a Node by Using Siblings

   <source lang="java">

/* Code revised from Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002

  • /

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     newEmail(doc, "B D", "newEmail");
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void newEmail(Document doc, String newname, String newemail) {
   Element root = doc.getDocumentElement();
   Element person = (Element) root.getFirstChild();
   while (person != null) {
     Element name = (Element) person.getFirstChild();
     Text nametext = (Text) name.getFirstChild();
     String oldname = nametext.getData();
     if (oldname.equals(newname)) {
       Element email = (Element) name.getNextSibling();
       Text emailtext = (Text) email.getFirstChild();
       emailtext.setData(newemail);
     }
     person = (Element) person.getNextSibling();
   }
 }
 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

} //File: personWithDTD.xml <?xml version="1.0" standalone="yes"?>

<!DOCTYPE folks [ <!ELEMENT folks (person)*> <!ELEMENT person (name, phone, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> <folks>

   <person>
       <name>B D</name>
       <phone>999 555-8888</phone>
       <email>b@xyz.net</email>
   </person>

</folks></source>





Locating Elements by Tag Name

   <source lang="java">

/* Code revised from Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002

  • /

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     makeNamelist(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 private static void makeNamelist(Document doc) {
   String names = null;
   Element root = doc.getDocumentElement();
   NodeList nameElements = root.getElementsByTagName("name");
   for(int i=0; i<nameElements.getLength(); i++) {
       Element name = (Element)nameElements.item(i);
       Text nametext = (Text)name.getFirstChild();
       if(names == null){
           names = nametext.getData();
       }else{
           names += ", " + nametext.getData();
       }
   }
   Element namelist = doc.createElement("names");
   Text namelisttext = doc.createTextNode(names);
   namelist.appendChild(namelisttext);
   root.insertBefore(namelist,root.getFirstChild());

}







 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

} //File: personWithDTD.xml <?xml version="1.0" standalone="yes"?>

<!DOCTYPE folks [ <!ELEMENT folks (person)*> <!ELEMENT person (name, phone, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> <folks>

   <person>
       <name>B D</name>
       <phone>999 555-8888</phone>
       <email>b@xyz.net</email>
   </person>

</folks></source>



<?xml version="1.0" standalone="yes"?>
<folks>
    <names>
        B D
    </names>
    <person>
        <name>
            B D
        </name>
        <phone>
            999 555-8888
        </phone>
        <email>
            b@xyz.net
        </email>
    </person>
</folks>


Methods to Insert a Processing Instruction and a Comment

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentFragment; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     addProcessingInstruction(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void addProcessingInstruction(Document doc) {
   Element root = doc.getDocumentElement();
   Element folks = (Element)root.getLastChild();
   ProcessingInstruction pi;
   pi = (ProcessingInstruction)doc.createProcessingInstruction(
       "validate",
       "phone=\"lookup\"");
   root.insertBefore(pi,folks);
 }









 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

} //File: persionWithDTD.xml <?xml version="1.0" standalone="yes"?> <!DOCTYPE locations [ <!ELEMENT locations (place)*> <!ELEMENT place (name | directions)*> <!ELEMENT name (#PCDATA)> <!ELEMENT directions (#PCDATA)> ]> <locations>

   <place>
       <name>oldName</name>
       <directions>oldDirection</directions>
   </place>

</locations></source>



<?xml version="1.0" standalone="yes"?>
<locations>
    <?validate phone="lookup"?>
    <place>
        <name>
            oldName
        </name>
        <directions>
            oldDirection
        </directions>
    </place>
</locations>


Modifying Text by Cutting and Pasting

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     modifyingTextbyCuttingandPasting(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void modifyingTextbyCuttingandPasting(Document doc) {
   Element root = doc.getDocumentElement();
   Element place = (Element)root.getFirstChild();
   Text name = (Text)place.getFirstChild().getFirstChild();
   Text directions = (Text)place.getLastChild().getFirstChild();

// name.deleteData(offset,count);

   name.deleteData(2,3);
   
   //String bridge = directions.substringData(offset,count);
   String bridge = directions.substringData(2,3);
   name.appendData(bridge);
 }    








 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}

//File: personWithDTD.xml <?xml version="1.0" standalone="yes"?> <!DOCTYPE locations [ <!ELEMENT locations (place)*> <!ELEMENT place (name | directions)*> <!ELEMENT name (#PCDATA)> <!ELEMENT directions (#PCDATA)> ]> <locations>

   <place>
       <name>name</name>
       <directions>direction</directions>
   </place>

</locations></source>



<?xml version="1.0" standalone="yes"?>
<locations>
    <place>
        <name>
            olmedDi
        </name>
        <directions>
            oldDirection
        </directions>
    </place>
</locations>


Moving and Copying Attributes

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     dupAttributes(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void dupAttributes(Document doc) {
   Element root = doc.getDocumentElement();
   Element personOne = (Element)root.getFirstChild();
   Attr deptAttr = personOne.getAttributeNode("dept");
   personOne.removeAttributeNode(deptAttr);
   String deptString = deptAttr.getValue();
   personOne.setAttribute("dept",deptString+" updated");
   String mailString = personOne.getAttribute("mail");
   personOne.setAttribute("mail",mailString+" updated");
   
   String titleString = personOne.getAttribute("title");
   //personOne.removeAttribute("title");
   personOne.setAttribute("title",titleString+" updated");

}







 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

} //File: personDTD.xml <?xml version="1.0" standalone="yes"?>

<!DOCTYPE folks [ <!ELEMENT folks (person)*> <!ELEMENT person (name, phone, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ATTLIST person number CDATA #IMPLIED

                dept CDATA #IMPLIED
                mail CDATA #IMPLIED
                title CDATA #IMPLIED>

]> <folks>

   <person number="3412" dept="medical" mail="mailValue" title="titleValue">
       <name>B D</name>
       <phone>999 555-8888</phone>
       <email>b@xyz.net</email>
   </person>

</folks></source>



<?xml version="1.0" standalone="yes"?>
<folks>
    <person dept="medical updated" mail="mailValue updated" number="3412" title="titleValue updated">
        <name>
            B D
        </name>
        <phone>
            999 555-8888
        </phone>
        <email>
            b@xyz.net
        </email>
    </person>
</folks>


Moving Nodes between Documents: Copy a Node from One Parse Tree into Another

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     importName(doc, doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void importName(Document doc1,Document doc2) {
   Element root1 = doc1.getDocumentElement();
   Element personInDoc1 = (Element)root1.getFirstChild();
   Node importedPerson = doc2.importNode(personInDoc1,true);
   Element root2 = doc2.getDocumentElement();
   root2.appendChild(importedPerson);
 }








 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

} //File: persionWithDTD.xml <?xml version="1.0" standalone="yes"?> <!DOCTYPE locations [ <!ELEMENT locations (place)*> <!ELEMENT place (name | directions)*> <!ELEMENT name (#PCDATA)> <!ELEMENT directions (#PCDATA)> ]> <locations>

   <place>
       <name>oldName</name>
       <directions>oldDirection</directions>
   </place>

</locations></source>



<?xml version="1.0" standalone="yes"?>
<locations>
    <place>
        <name>
            oldName
        </name>
        <directions>
            oldDirection
        </directions>
    </place>
    <place>
        <name>
            oldName
        </name>
        <directions>
            oldDirection
        </directions>
    </place>
</locations>


Normalize All of the Text in a Document

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     normalize(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void normalize(Document doc) {
   Element root = doc.getDocumentElement();
   root.normalize();
 }








 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

} //File: personWithDTD.xml <?xml version="1.0" standalone="yes"?> <!DOCTYPE locations [ <!ELEMENT locations (place)*> <!ELEMENT place (name | directions)*> <!ELEMENT name (#PCDATA)> <!ELEMENT directions (#PCDATA)> ]> <locations>

   <place>
       <name>name</name>
       <directions>direction</directions>
   </place>

</locations></source>





Replacing a Tree Node: Replacing an Existing Node with a New One

   <source lang="java">

/* Code revised from Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002

  • /

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     replacePerson(doc,"newName","111111","newEmail@email.ru");
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void replacePerson(Document doc, String name, String phone, String email) {
   Element newPersonNode = doc.createElement("person");
   Element nameNode = doc.createElement("name");
   newPersonNode.appendChild(nameNode);
   Text nametextNode = doc.createTextNode(name);
   nameNode.appendChild(nametextNode);
   Element phoneNode = doc.createElement("phone");
   newPersonNode.appendChild(phoneNode);
   Text phonetextNode = doc.createTextNode(phone);
   phoneNode.appendChild(phonetextNode);
   Element emailNode = doc.createElement("email");
   newPersonNode.appendChild(emailNode);
   Text emailtextNode = doc.createTextNode(email);
   emailNode.appendChild(emailtextNode);
   Element root = doc.getDocumentElement();
   Element oldPersonNode = (Element) root.getFirstChild();
   root.replaceChild(newPersonNode, oldPersonNode);
 }
 
 
 
 
 
 
 
 
 
 
 
 
 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}

//File: personWithDTD.xml <?xml version="1.0" standalone="yes"?>

<!DOCTYPE folks [ <!ELEMENT folks (person)*> <!ELEMENT person (name, phone, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> <folks>

   <person>
       <name>B D</name>
       <phone>999 555-8888</phone>
       <email>b@xyz.net</email>
   </person>

</folks></source>





Setting an Attribute

   <source lang="java">

import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.rument; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class DOMEdit {

 static public void main(String[] arg) {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setValidating(true);
   dbf.setNamespaceAware(true);
   dbf.setIgnoringElementContentWhitespace(true);
   Document doc = null;
   try {
     DocumentBuilder builder = dbf.newDocumentBuilder();
     builder.setErrorHandler(new MyErrorHandler());
     InputSource is = new InputSource("personWithDTD.xml");
     doc = builder.parse(is);
     addAttribute(doc);
     write(doc);
   } catch (Exception e) {
     System.err.println(e);
   }
 }
 public static void addAttribute(Document doc) {
   Element root = doc.getDocumentElement();
   Element person = (Element)root.getFirstChild();
   person.setAttribute("company","yourCom");
 }







 private static final String TAB = "    ";
 private static void write(Document doc) throws IOException {
   outputHeading(doc);
   outputElement(doc.getDocumentElement(), "");
 }
 private static void outputHeading(Document doc) {
   System.out.print("<?xml version=\"1.0\"");
   DocumentType doctype = doc.getDoctype();
   if (doctype != null) {
     if ((doctype.getPublicId() == null) && (doctype.getSystemId() == null)) {
       System.out.println(" standalone=\"yes\"?>");
     } else {
       System.out.println(" standalone=\"no\"?>");
     }
   } else {
     System.out.println("?>");
   }
 }
 private static void outputElement(Element node, String indent) {
   System.out.print(indent + "<" + node.getTagName());
   NamedNodeMap nm = node.getAttributes();
   for (int i = 0; i < nm.getLength(); i++) {
     Attr attr = (Attr) nm.item(i);
     System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
   }
   System.out.println(">");
   NodeList list = node.getChildNodes();
   for (int i = 0; i < list.getLength(); i++)
     outputloop(list.item(i), indent + TAB);
   System.out.println(indent + "</" + node.getTagName() + ">");
 }
 private static void outputText(Text node, String indent) {
   System.out.println(indent + node.getData());
 }
 private static void outputCDATASection(CDATASection node, String indent) {
   System.out.println(indent + node.getData() );
 }
 private static void outputComment(Comment node, String indent) {
   System.out.println(indent + "");
 }
 private static void outputProcessingInstructionNode(ProcessingInstruction node, String indent) {
   System.out.println(indent + "<?" + node.getTarget() + " " + node.getData() + "?>");
 }
 private static void outputloop(Node node, String indent) {
   switch (node.getNodeType()) {
   case Node.ELEMENT_NODE:
     outputElement((Element) node, indent);
     break;
   case Node.TEXT_NODE:
     outputText((Text) node, indent);
     break;
   case Node.CDATA_SECTION_NODE:
     outputCDATASection((CDATASection) node, indent);
     break;
   case Node.ruMENT_NODE:
     outputComment((Comment) node, indent);
     break;
   case Node.PROCESSING_INSTRUCTION_NODE:
     outputProcessingInstructionNode((ProcessingInstruction) node, indent);
     break;
   default:
     System.out.println("Unknown node type: " + node.getNodeType());
     break;
   }
 }

} class MyErrorHandler implements ErrorHandler {

 public void warning(SAXParseException e) throws SAXException {
   show("Warning", e);
   throw (e);
 }
 public void error(SAXParseException e) throws SAXException {
   show("Error", e);
   throw (e);
 }
 public void fatalError(SAXParseException e) throws SAXException {
   show("Fatal Error", e);
   throw (e);
 }
 private void show(String type, SAXParseException e) {
   System.out.println(type + ": " + e.getMessage());
   System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
   System.out.println("System ID: " + e.getSystemId());
 }

}

//File: personWithDTD.xml <?xml version="1.0" standalone="yes"?>

<!DOCTYPE folks [ <!ELEMENT folks (person)*> <!ELEMENT person (name, phone, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ATTLIST person number CDATA #IMPLIED

                dept CDATA "staff">

]> <folks>

   <person number="3412" dept="medical">
       <name>B D</name>
       <phone>999 555-8888</phone>
       <email>b@xyz.net</email>
   </person>

</folks></source>



<?xml version="1.0" standalone="yes"?>
<folks>
    <person company="yourCom" dept="medical" number="3412">
        <name>
            B D
        </name>
        <phone>
            999 555-8888
        </phone>
        <email>
            b@xyz.net
        </email>
    </person>
</folks>


Start a new XML Document

   <source lang="java">

import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; public class Utils {

 /**
  * Start a new XML Document.
  * @param rootName The name of the Document root Element (created here)
  * @return the Document
  * @throws DomException
  */
 public static Document createXmlDocument(String rootName)  {
     Document  document  = getXmlDocumentBuilder().newDocument();
     Element   root      = document.createElement(rootName);
     document.appendChild(root);
     return document;
 
 }
 /**
  * Get a DOM Document builder.
  * @return The DocumentBuilder
  * @throws DomException
  */
 public static DocumentBuilder getXmlDocumentBuilder() {
   try {
     DocumentBuilderFactory factory;
     factory = DocumentBuilderFactory.newInstance();
     factory.setNamespaceAware(false);
     return factory.newDocumentBuilder();
   } catch (Exception e) {
     
   }
   return null;
 }

}</source>