Java/XML/JDOM

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

Accessing Attributes Using JDOM

   <source lang="java">
  

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Iterator; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.adapters.XercesDOMAdapter; import org.jdom.input.DOMBuilder; public class JDOMCreateExample {

 private static DOMBuilder builder = null;
 public static void main(String args[]) throws Exception, FileNotFoundException {
   XercesDOMAdapter xercAdapter = new XercesDOMAdapter();
   org.w3c.dom.Document w3Dom = xercAdapter.getDocument(new FileInputStream("games.xml"), false);
   builder = new DOMBuilder("org.jdom.adapters.XercesDOMAdapter");
   Document doc = builder.build(w3Dom);
   List childs = doc.getRootElement().getChildren("game");
   Iterator itr = childs.iterator();
   while (itr.hasNext()) {
     Element child = (Element) itr.next();
     System.out.println(child.getName() + " = " + child.getText());
     System.out.println(child.getAttributeValue("genre"));
   }
 }

}


 </source>
   
  
 
  



Add elements to root element

   <source lang="java">
  

import org.jdom.Document; import org.jdom.Element; import org.jdom.output.XMLOutputter; public class MainClass {

   public static void main(String[] args) throws Exception {
       Element rootElement = new Element("root");
       Document document = new Document(rootElement);
       for (int i = 0; i < 10000; i++) {
           rootElement.addContent(new Element("blah"));
           rootElement.addContent(new Element("blah"));
           rootElement.addContent(new Element("blah").setText("foo"));
           rootElement.addContent(new Element("blah"));
       }
       
       new XMLOutputter().output(document, System.out);
   }

}


 </source>
   
  
 
  



Adding an Attribute Using JDOM

   <source lang="java">
  

import org.jdom.Document; import org.jdom.Element; public class MainClass {

 public static void main(String args[]) {
   Document doc = new Document(new Element("games"));
   Element newGame = new Element("game").setText("Final Fantasy");
   doc.getRootElement().addContent(newGame);
   newGame.setAttribute("genre", "rpg");
 }

}


 </source>
   
  
 
  



Adding an Element Using JDOM

   <source lang="java">
  

import org.jdom.Document; import org.jdom.Element; public class MainClass {

 public static void main(String args[]) {
   Document doc = new Document(new Element("games"));
   Element newGame = new Element("game").setText("Final Fantasy");
   doc.getRootElement().addContent(newGame);
 }

}


 </source>
   
  
 
  



Create document from jdom

   <source lang="java">
  

import java.io.IOException; import org.jdom.rument; import org.jdom.Document; import org.jdom.Element; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; public class MainClass {

 public static void main(String[] args) throws IOException {
   Document doc = new Document(new Element("r").setAttribute("attribute", "value").addContent(
       new Element("inner")).addContent(new Comment("comment text"))
       .addContent("some inline text").addContent(new Element("inner2")));
   new XMLOutputter(Format.getPrettyFormat()).output(doc, System.out);
 }

}


 </source>
   
  
 
  



Creating a Document Using JDOM

   <source lang="java">
  

import org.jdom.Document; import org.jdom.Element; public class MainClass {

 public static void main(String args[]) {
   Document doc = new Document(new Element("games"));
 }

}


 </source>
   
  
 
  



extends org.jdom.Element

   <source lang="java">
  

import org.jdom.Element; import org.jdom.Namespace; public class ORAElement extends Element {

   private static final Namespace ORA_NAMESPACE =
       Namespace.getNamespace("ora", "http://www.jexp.ru");
   public ORAElement(String name) {
       super(name, ORA_NAMESPACE);
   }
   public ORAElement(String name, Namespace ns) {
       super(name, ORA_NAMESPACE);
   }
   public ORAElement(String name, String uri) {
       super(name, ORA_NAMESPACE);
   }
   public ORAElement(String name, String prefix, String uri) {
       super(name, ORA_NAMESPACE);
   }

}


 </source>
   
  
 
  



General XML Utility Functions For JDOM

   <source lang="java">

package net.firstpartners.nounit.utility; /**

* Title:        NoUnit - Identify Classes that are not being unit Tested
*
* Copyright (C) 2001  Paul Browne , FirstPartners.net
*
*
* This program is free software; you can redistribute it and/or 
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
* @author Paul Browne
* @version 0.6
*/

import java.io.*; import java.util.*; import java.util.zip.*; import org.jdom.*; import org.jdom.output.*; import org.jdom.input.*;

/**

* General XML Utility Functions
*/

public class XmlUtil {

 /**
  * indexes the nodes in the document that is passed in , via a HashMap mapping
  * mapping is in the format <index> as String , handle to <element> of node
* Strings are used as they are better lookup in the hashmap. * @param inXmlDocument to generated the hashmap from * @param uniqueAttribute to do the index on (i.e. key in HashMap). Examples * of uniqueAttributes are id"s or names. * @return HashMap containing mappings */ public static HashMap getNodeIndex(Document inXmlDocument, String uniqueAttribute) { //Internal Variables int stackPointer=0; String locationId =null; Attribute tmpAttribute=null; Element thisElement=null; ListIterator deepestList=null; HashMap mappings = new HashMap(); List stack = new Vector(); //Get the list information for the entire document stack.add(inXmlDocument.getContent().listIterator()); //Loop though the elements on list while (!stack.isEmpty()){ //Get the last list on the stack deepestList = (ListIterator)stack.get(stack.size()-1); //Does this list have more elements? if (deepestList.hasNext()) { //if so Get Next element from this list thisElement = (Element)deepestList.next(); //Add Mapping for this element to hashtable tmpAttribute = thisElement.getAttribute(uniqueAttribute); //Attibute can be null for non folder elements (e.g. root element) - if so ignore if (tmpAttribute!=null) { locationId= tmpAttribute.getValue(); if ((locationId!=null)&&(locationId!="")) { mappings.put(locationId.toString(),thisElement); } } //end add mapping //does this list have children ? if(thisElement.hasChildren()){ //if so add to the stack stackPointer++; stack.add(thisElement.getChildren().listIterator()); } } else { //if not , remove this list from the stack stack.remove(stackPointer); stackPointer--; } // end if stack has more elements } return mappings; } /** * gets all elements in the XML Document Being Passed in
* @param inXmlDocument to generated the hashmap from * @return nodeList containing nodes */ public static HashSet getAllNodes(Document inXmlDocument) { //Internal Variables int stackPointer=0; int index=1; String locationId=null; Element currentElement=null; Element parentElement=null; Element thisElement=null; Attribute tmpAttribute=null; List elementList=null; ListIterator deepestList=null; HashMap mappings = new HashMap(); HashSet nodeList = new HashSet(); List stack = new Vector(); //Implements list interface //Get the list information for the entire document - kick start loop stack.add(inXmlDocument.getContent().listIterator()); //Loop though the elements on list while (!stack.isEmpty()){ //Get the last list on the stack deepestList = (ListIterator)stack.get(stack.size()-1); //Does this list have more elements? if (deepestList.hasNext()) { //if so Get Next element from this list thisElement = (Element)deepestList.next(); // add this element to the list nodeList.add(thisElement); //does this list have children ? if(thisElement.hasChildren()){ //if so add to the stack stackPointer++; stack.add(thisElement.getChildren().listIterator()); } } else { //if not , remove this list from the stack stack.remove(stackPointer); stackPointer--; } // end if stack has more elements } return nodeList; } /** * Search for Nodes within Jdom Document
* @param inDocumentToSearch XML-JDOM Document * @param uniqueIdentifierName we can use to index the document (unique * attribute like id or name present on the node we are searching for) * @param uniqueIdentifierToFind in the indexed document */ public static Element findNode(Document inDocumentToSearch , String uniqueIdentifierName , String uniqueIdentifierToFind) { // index document HashMap index = getNodeIndex(inDocumentToSearch, uniqueIdentifierName); // Now get required element from index return (Element)index.get(uniqueIdentifierToFind); }

}

 </source>
   
  
 
  



Get child from root

   <source lang="java">
  

import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; public class MainClass {

 public static void main(String[] args) throws Exception {
   SAXBuilder builder = new SAXBuilder();
   Document books = builder.build("books.xml");
   Document onebook = builder.build("onebook.xml");
   Element bookToAdd = onebook.getRootElement().getChild("book");
   books.getRootElement().addContent(bookToAdd);
   new XMLOutputter(Format.getPrettyFormat()).output(books, System.out);
 }

}


 </source>
   
  
 
  



Iterate through elements

   <source lang="java">
  

import java.util.Iterator; import org.jdom.Content; import org.jdom.Document; import org.jdom.Text; import org.jdom.input.SAXBuilder; public class MainClass {

 public static void main(String[] args) throws Exception {
   SAXBuilder builder = new SAXBuilder();
   Document doc = builder.build("mixed.xml");
   for (Iterator it = doc.getRootElement().getContent().iterator(); it.hasNext();) {
     Content content = (Content) it.next();
     if (content instanceof Text) {
       System.out.println("[Text: " + ((Text) content).getTextNormalize());
     } else {
       System.out.println(content.toString());
     }
   }
 }

}


 </source>
   
  
 
  



JDom: Locating a speech with the findCharactersFirstSpeech() method

   <source lang="java">
  

import java.io.File; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; public class MainClass {

 public static void main(String[] args) throws Exception{
     String characterName ="asdf";
     SAXBuilder builder = new SAXBuilder();
     Document document = builder.build(new File("r.xml"));
     List actList = document.getRootElement().getChildren("ACT");
     allDone: for (int act = 0; act < actList.size(); act++) {
       List sceneList = ((Element) actList.get(act)).getChildren("SCENE");
       for (int scene = 0; scene < sceneList.size(); scene++) {
         List speechList = ((Element) sceneList.get(scene)).getChildren("SPEECH");
         for (int speech = 0; speech < speechList.size(); speech++) {
           if (characterName.equalsIgnoreCase(((Element) speechList.get(speech))
               .getChildText("SPEAKER"))) {
             System.out.println(characterName);
             break allDone;
           }
         }
       }
     }
 }

}


 </source>
   
  
 
  



JDOM: transform

   <source lang="java">
  

import java.io.File; import java.io.FileWriter; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamSource; import org.jdom.Document; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; import org.jdom.transform.JDOMResult; import org.jdom.transform.JDOMSource; public class Transform2 {

 public static void main(String[] args) throws Exception {
   SAXBuilder builder = new SAXBuilder();
   Document document = builder.build(new File("r.xml"));
   Transformer transformer = TransformerFactory.newInstance().newTransformer(
       new StreamSource("program.xsl"));
   JDOMResult out = new JDOMResult();
   transformer.transform(new JDOMSource(document), out);
   XMLOutputter xmlOutputter = new XMLOutputter();
   xmlOutputter.output(out.getDocument(), new FileWriter("JDOMAlteredRichard.html"));
 }

}


 </source>
   
  
 
  



JDOM Util

   <source lang="java">

/*

* This file is made available under the terms of the LGPL licence.
* This licence can be retrieved from http://www.gnu.org/copyleft/lesser.html.
* The source remains the property of the YAWL Foundation.  The YAWL Foundation is a
* collaboration of individuals and organisations who are committed to improving
* workflow technology.
*/

import org.jdom.*; import org.jdom.input.SAXBuilder; import org.jdom.output.*; import org.apache.log4j.Logger; import java.io.*;

/**

* Some static utility methods for coverting JDOM Documents and Elements
* to Strings and files & vice versa.
*
*  @author Michael Adams
*  04/07/2006
*
*  Last date: 22/06/08
*/
public class JDOMUtil {
   private static Logger _log = Logger.getLogger("org.yawlfoundation.yawl.util.JDOMUtil");
   /****************************************************************************/
   public static String documentToString(Document doc) {
       if (doc == null) return null;
       XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
       return out.outputString(doc);
   }
   /****************************************************************************/
   public static String elementToString(Element e) {
       if (e == null) return null ;
       XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
       return out.outputString(e);
   }
   /****************************************************************************/
   public static String elementToStringDump(Element e) {
       if (e == null) return null ;
       XMLOutputter out = new XMLOutputter(Format.getCompactFormat());
       return out.outputString(e);
   }
   /****************************************************************************/
   public static Document stringToDocument(String s) {
       try {
          if (s == null) return null ;
          return new SAXBuilder().build(new StringReader(s));
       }
       catch (JDOMException jde) {
           _log.error("JDOMException converting to Document, String = " + s , jde);
           return null ;
       }
       catch (IOException ioe) {
           _log.error("IOException converting to Document, String = " + s, ioe);
           return null ;
       }
   }
   /****************************************************************************/
   public static Element stringToElement(String s) {
       if (s == null) return null ;
       Document doc = stringToDocument(s);
       return doc.getRootElement();
   }
   /****************************************************************************/
   public static Document fileToDocument(String path) {
      try {
          if (path == null) return null ;
          return new SAXBuilder().build(new File(path));
      }
      catch (JDOMException jde) {
          _log.error("JDOMException loading file into Document, filepath = " + path , jde);
          return null ;
      }
      catch (IOException ioe) {
          _log.error("IOException loading file into Document, filepath = " + path, ioe);
          return null ;
      }
   }
   /****************************************************************************/
        /** saves a JDOM Document to a file */
    public static void documentToFile(Document doc, String path)   {
       try {
          FileOutputStream fos = new FileOutputStream(path);
          XMLOutputter xop = new XMLOutputter(Format.getPrettyFormat());
          xop.output(doc, fos);
          fos.flush();
          fos.close();
     }
     catch (IOException ioe){
         _log.error("IO Exeception in saving Document to file, filepath = " + path, ioe) ;
     }
  }
   /****************************************************************************/
   public static String getDefaultValueForType(String dataType) {
       if (dataType == null) return "null";
       else if (dataType.equalsIgnoreCase("boolean")) return "false" ;
       else if (dataType.equalsIgnoreCase("string")) return "" ;
       else return "0";
   }
   /****************************************************************************/
   public static String encodeEscapes(String s) {
       if (s == null) return s;
       return s.replaceAll("&", "&")
               .replaceAll("<", "<")                
               .replaceAll(">", ">")
               .replaceAll("\"", """)
               .replaceAll(""", "'") ;
   }
   public static String decodeEscapes(String s) {
       if (s == null) return s;
       return s.replaceAll("&", "&")
               .replaceAll("<","<")               
               .replaceAll(">", ">")
               .replaceAll(""","\"")
               .replaceAll("'", """) ;
   }
   /****************************************************************************/
   public static String formatXMLString(String s) {
       if (s == null) return null;
       if (s.startsWith("<?xml"))
           return documentToString(stringToDocument(s));
       else
           return elementToString(stringToElement(s));
   }
   public static String formatXMLStringAsDocument(String s) {
       return documentToString(stringToDocument(s));
   }
   public static String formatXMLStringAsElement(String s) {
       return elementToString(stringToElement(s));
   }

} //ends

 </source>
   
  
 
  



List an XML file after building it into a JDOM Document

   <source lang="java">
 

/*

* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.
* All rights reserved. Software written by Ian F. Darwin and others.
* $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS""
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* 
* Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee
* cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s,
* pioneering role in inventing and promulgating (and standardizing) the Java 
* language and environment is gratefully acknowledged.
* 
* The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
* inventing predecessor languages C and C++ is also gratefully acknowledged.
*/

import java.io.File; import org.jdom.Document; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; /**

* List an XML file after building it into a JDOM Document.
* Notice it is easier than using SAX or DOM directly.
*/

public class JDOMLister {

 public static void main(String[] args) { 
   try {
     SAXBuilder b = new SAXBuilder(true);  // true -> validate
     // Create a JDOM document.
     Document doc = b.build(new File("people.xml"));
     // Create an output formatter, and have it write the doc.
     new XMLOutputter().output(doc, System.out);
   } catch (JDOMException jex) {
     System.out.print("PARSE ERROR: " + jex.getMessage());
   } catch (Exception ex) {
     ex.printStackTrace();
   }
 }

} // demo xml file /* <?xml version="1.0"?> <people> <person>

 <name>Ian Darwin</name>
 <email>http://www.darwinsys.ru/</email>
 <country>Canada</country>

</person> <person>

 <name>Another Darwin</name>
 <email type="intranet">afd@node1</email>
 <country>Canada</country>

</person> </people>

  • /



 </source>
   
  
 
  



Make up and write an XML document, using JDOM

   <source lang="java">
 

/*

* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.
* All rights reserved. Software written by Ian F. Darwin and others.
* $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS""
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* 
* Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee
* cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s,
* pioneering role in inventing and promulgating (and standardizing) the Java 
* language and environment is gratefully acknowledged.
* 
* The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
* inventing predecessor languages C and C++ is also gratefully acknowledged.
*/

import org.jdom.Document; import org.jdom.Element; import org.jdom.output.XMLOutputter; /** Make up and write an XML document, using JDOM

* @author Ian Darwin, http://www.darwinsys.ru/
* @version $Id: DocWriteJDOM.java,v 1.4 2004/02/09 03:34:10 ian Exp $
*/

public class DocWriteJDOM {

 public static void main(String[] av) throws Exception {
   DocWriteJDOM dw = new DocWriteJDOM();
   Document doc = dw.makeDoc();
   // Create an output formatter, and have it write the doc.
   new XMLOutputter().output(doc, System.out);
 }
 /** Generate the XML document */
 protected Document makeDoc() throws Exception {
     Document doc = new Document(new Element("Poem"));
     doc.getRootElement().
       addContent(new Element("Stanza").
         addContent(new Element("Line").
             setText("Once, upon a midnight dreary")).
         addContent(new Element("Line").
             setText("While I pondered, weak and weary")));
     return doc;
 }

} // demo xml file /* <?xml version="1.0"?> <people> <person>

 <name>Ian Darwin</name>
 <email>http://www.darwinsys.ru/</email>
 <country>Canada</country>

</person> <person>

 <name>Another Darwin</name>
 <email type="intranet">afd@node1</email>
 <country>Canada</country>

</person> </people>

  • /



 </source>
   
  
 
  



NamespaceTest with JDOM

   <source lang="java">
  

import java.io.File; import java.io.FileOutputStream; import org.jdom.Document; import org.jdom.Element; import org.jdom.Namespace; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; public class MainClass {

 public static void main(String[] args) throws Exception {
   Namespace nsShort = Namespace.getNamespace("short");
   Namespace nsWeird = Namespace.getNamespace("e", "w");
   Document doc = new Document();
   Element easy = new Element("easy", nsShort);
   doc.setRootElement(easy);
   Element b = new Element("b", nsShort);
   Element c = new Element("c", nsShort);
   easy.addContent(b);
   b.addContent(c);
   Element d = new Element("d", nsShort);
   Element f = new Element("f", nsWeird);
   f.addContent(new Element("g", nsShort));
   d.addContent(f);
   easy.addContent(d);
   new XMLOutputter(Format.getPrettyFormat()).output(doc, new FileOutputStream("short.xml"));
   SAXBuilder sb = new SAXBuilder();
   sb.setFeature("http://xml.org/sax/features/namespaces", false);
   sb.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
   Document doc2 = sb.build(new File("short.xml"));
   new XMLOutputter(Format.getPrettyFormat()).output(doc2, System.out);
 }

}


 </source>
   
  
 
  



Outputting a Document Using XMLOutputter

   <source lang="java">
  

import java.io.IOException; import org.jdom.Document; import org.jdom.Element; import org.jdom.output.XMLOutputter; public class MainClass {

 public static void main(String args[]) throws IOException {
   Document doc = new Document(new Element("games"));
   Element newGame = new Element("game").setText("Final Fantasy");
   doc.getRootElement().addContent(newGame);
   newGame.setAttribute("genre", "rpg");
   XMLOutputter domstream = new XMLOutputter();
   domstream.output(doc, System.out);
 }

}


 </source>
   
  
 
  



Parsing with JDOM

   <source lang="java">
  

import java.io.FileInputStream; import java.io.IOException; import java.io.FileNotFoundException; import org.jdom.Document; import org.jdom.JDOMException; import org.jdom.adapters.XercesDOMAdapter; import org.jdom.input.DOMBuilder; import org.jdom.output.XMLOutputter; public class JDOMCreateExample {

 private static DOMBuilder builder = null;
 public static void main(String args[]) throws IOException, FileNotFoundException {
   XercesDOMAdapter xercAdapter = new XercesDOMAdapter();
   org.w3c.dom.Document w3Dom = xercAdapter.getDocument(new FileInputStream("games.xml"), false);
   builder = new DOMBuilder("org.jdom.adapters.XercesDOMAdapter");
   Document doc = builder.build(w3Dom);
 }

}


 </source>
   
  
 
  



Read an XML document using JDOM

   <source lang="java">
 

import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.List; public class Main {

 public static void main(String[] args) {
   String data = "<root><row><column name="username" length="6">admin</column>"
       + "<column name="password" length="1">p</column></row><row>"
       + "<column name="username" length="6">j</column>"
       + "<column name="password" length="8">q</column></row></root>";
   SAXBuilder builder = new SAXBuilder();
   Document document = builder.build(new ByteArrayInputStream(data.getBytes()));
   Element root = document.getRootElement();
   List rows = root.getChildren("row");
   for (int i = 0; i < rows.size(); i++) {
     Element row = (Element) rows.get(i);
     List columns = row.getChildren("column");
     for (int j = 0; j < columns.size(); j++) {
       Element column = (Element) columns.get(j);
       String name = column.getAttribute("name").getValue();
       String value = column.getText();
       int length = column.getAttribute("length").getIntValue();
       System.out.println("name = " + name);
       System.out.println("value = " + value);
       System.out.println("length = " + length);
     }
   }
 }

}


 </source>
   
  
 
  



Simple demo of JDOM

   <source lang="java">
 

/*

* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.
* All rights reserved. Software written by Ian F. Darwin and others.
* $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS""
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* 
* Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee
* cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s,
* pioneering role in inventing and promulgating (and standardizing) the Java 
* language and environment is gratefully acknowledged.
* 
* The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
* inventing predecessor languages C and C++ is also gratefully acknowledged.
*/

import java.io.IOException; import java.util.Iterator; import java.util.List; import org.jdom.rument; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.ProcessingInstruction; import org.jdom.input.DOMBuilder; import org.jdom.input.SAXBuilder; import org.jdom.output.DOMOutputter; /*

* Simple demo of JDOM
*/

public class JDOMDemo {

   public static void main(String[] args) {
 
   // Must be at least one file or URL argument
       if (args.length == 0) {
           System.out.println("Usage: java JDOMDemo URL [...]"); 
       } 
       
       SAXBuilder saxBuilder = new SAXBuilder();
       DOMBuilder domBuilder = new DOMBuilder();
               
       for (int i = 0; i < args.length; i++) {
     
           try {
               Document jdomDocument = saxBuilder.build(args[i]);
               DOMOutputter domOutputter = new DOMOutputter();
               /*
                * Test getting DOM Document from JDOM Document
               org.w3c.dom.Document domDocument = domOutputter.output(doc);
                */
               /*
                * Test getting DOM Element from JDOM Element
                */
               org.w3c.dom.Element domElement = 
                 domOutputter.output(jdomDocument.getRootElement());
               /*
                * Test getting JDOM Element from DOM Element
                */
               org.jdom.Element jdomElement = domBuilder.build(domElement);
               demo(jdomElement);
           } catch (JDOMException e) { // indicates a well-formedness or other error
               System.out.println(args[i] + " is not a well formed XML document.");
               System.out.println(e.getMessage());
           } catch (IOException ex) {
       System.out.println("Input or Output error:" + 
         args[i] + ": " + ex);
     }     
       }
   }
   public static void demo(Document doc) {
       List children = doc.getContent();
       Iterator iterator = children.iterator();
       while (iterator.hasNext()) {
           Object o = iterator.next();
           if (o instanceof Element) {
               demo((Element) o);
           }
           else if (o instanceof Comment)
       doComment((Comment) o);
           else if (o instanceof ProcessingInstruction) 
       doPI((ProcessingInstruction) o);
       }
   }     
   public static void demo(Element element) {
   System.out.println("Element " + element);
       List attributes = element.getAttributes();
       List children = element.getContent();
       Iterator iterator = children.iterator();
       while (iterator.hasNext()) {
           Object o = iterator.next();
           if (o instanceof Element) {
               demo((Element) o);
           }
           else if (o instanceof Comment) 
       doComment((Comment)o);
           else if (o instanceof ProcessingInstruction) 
       doPI((ProcessingInstruction)o);
           else if (o instanceof String) {
               System.out.println("String: " + o);
           }   
       }
   }  
 public static void doComment(Comment c) {
   System.out.println("Comment: " + c);
 }
 public static void doPI(ProcessingInstruction pi) {
   System.out.println("PI: " + pi);
 }

} // demo xml file /* <?xml version="1.0"?> <people> <person>

 <name>Ian Darwin</name>
 <email>http://www.darwinsys.ru/</email>
 <country>Canada</country>

</person> <person>

 <name>Another Darwin</name>
 <email type="intranet">afd@node1</email>
 <country>Canada</country>

</person> </people>

  • /



 </source>
   
  
 
  



Simple example of using JDOM

   <source lang="java">
 

import java.util.Iterator; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; /**

* @author robh
*  
*/

public class HelloPeopleJDOM {

   public static void main(String[] args) throws Exception {
       SAXBuilder builder = new SAXBuilder();
       Document doc = builder.build("./src/data.xml");
       StringBuffer output = new StringBuffer();
       // create the basic HTML output
       output.append("<html>\n").append(
               "<head>\n<title>\nPerson List</title>\n</head>\n").append(
"<body>\n").append("
    \n"); Iterator itr = doc.getRootElement().getChildren().iterator(); while (itr.hasNext()) { Element elem = (Element) itr.next(); output.append("
  • "); output.append(elem.getAttribute("lastName").getValue()); output.append(", "); output.append(elem.getAttribute("firstName").getValue()); output.append("
  • \n");
           }
           // create the end of the HTML output
    
    output.append("
\n</body>\n</html>");
       System.out.println(output.toString());
   }

}


 </source>
   
  
 
  



Use JDOM to build a document

   <source lang="java">
 

import org.jdom.*; import org.jdom.input.*; import org.jdom.output.*; import java.util.*; import java.io.*; public class JDOMTest {

 public static void showBooks( Element root ) {
      List books = root.getChildren( "book" );
      for( Iterator i=books.iterator(); i.hasNext(); ) {
        Element book = ( Element )i.next();
        System.out.println( "Book: " + book.getAttributeValue( "category" ) + ", " +
                            book.getChildTextTrim( "title" ) + ", " +
                            book.getChildTextTrim( "author" ) + ", " + 
                            book.getChildTextTrim( "price" ) );
      }
 }
 public static void main( String[] args ) throws Exception{ 
      SAXBuilder builder = new SAXBuilder();
      Document doc = builder.build( "book.xml" );
      Element root = doc.getRootElement();
      System.out.println( "Book List Before: " );
      showBooks( root );
      // Add a new book
      Element newBook = new Element( "book" );
      newBook.setAttribute( "category", "fiction" );
      Element newTitle = new Element( "title" );
      newTitle.addContent( "Desecration" );
      Element newAuthor = new Element( "author" );
      newAuthor.addContent( "Tim LaHaye" );
      Element newPrice = new Element( "price" );
      newPrice.addContent( "19.95" );
      newBook.addContent( newTitle );
      newBook.addContent( newAuthor );
      newBook.addContent( newPrice );
      root.addContent( newBook );
      System.out.println( "Book List After: " );
      showBooks( root );
      XMLOutputter out = new XMLOutputter( "  ", true );
      out.output( root, System.out );
 }

} <books>

 <book category="fiction"> 
   <title>title 1</title> 
   <author>Tim Lahaye</author> 
   <price>14.95</price> 
 </book> 
 <book category="science fiction"> 
   <title>title 2</title> 
   <author>Tim Lahaye</author> 
   <price>14.95</price> 
 </book> 

</books>


 </source>
   
  
 
  



Use JDOM to change the element text

   <source lang="java">
  

import java.io.File; import java.io.FileWriter; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; public class MainClass {

 public static void main(String[] args) throws Exception {
   SAXBuilder builder = new SAXBuilder();
   Document document = builder.build(new File("r.xml"));
   Element prologue, title, speech;
   prologue = new Element("P");
   List actList = document.getRootElement().getChildren("ACT");
   document.getRootElement().removeChildren("ACT");
   document.getRootElement().addContent(prologue);
   for (int act = 0; act < actList.size(); act++) {
     document.getRootElement().addContent((Element) actList.get(act));
   }
   title = new Element("TITLE");
   title.setText("test");
   prologue.addContent(title);
   speech = new Element("SPEECH");
   speech.setText("test");
   prologue.addContent(speech);
   XMLOutputter xmlOutputter = new XMLOutputter();
   xmlOutputter.output(document, new FileWriter("rewrite.xml"));
 }

}


 </source>
   
  
 
  



Use SAXBuilder from JDOM

   <source lang="java">
  

import java.util.Iterator; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; public class MainClass {

 public static void main(String[] args) throws Exception {
   Document doc = new SAXBuilder().build("books.xml");
   Element books = doc.getRootElement();
   Iterator it = books.getChildren().iterator();
   while (it.hasNext()) {
     Element book = (Element) it.next();
     System.out.println(book.getChildText("name") + " was published in "
         + book.getChildText("pubDate"));
   }
 }

}


 </source>
   
  
 
  



Use Unchecked JDOM Factory

   <source lang="java">
  

import org.jdom.Document; import org.jdom.UncheckedJDOMFactory; import org.jdom.input.SAXBuilder; import org.xml.sax.XMLReader; import com.sun.org.apache.xerces.internal.parsers.XMLParser; public class UncheckedFactorySample {

   public static void main(String[] args) throws Exception {
      
       SAXBuilder builder = new SAXBuilder();
       builder.setFeature("http://xml.org/sax/features/validation", false);
       builder.setFactory(new UncheckedJDOMFactory());
       Document doc = builder.build("bad.xml");
       System.out.println(doc.getRootElement().getName());
   }

}


 </source>
   
  
 
  



Use XPath in servlet

   <source lang="java">
  

import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jdom.Document; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath; public class PostServlet extends HttpServlet {

   private SAXBuilder builder = new SAXBuilder();
   private XPath nameXPath;
   private XPath yearXPath;
   protected void doPost(HttpServletRequest request,
           HttpServletResponse response) throws ServletException, IOException {
       if (!"text/xml".equals(request.getContentType())) {
           response.getWriter().println("Please post as text/xml.");
       } else {
           try {
               Document doc = builder.build(request.getReader());
               StringBuffer buff = new StringBuffer();
               buff.append("You searched for name "" + nameXPath.valueOf(doc)
                       + """);
               String year = yearXPath.valueOf(doc);
               if (!"notselected".equals(year)) {
                   buff.append(" and year "" + year + """);
               }
               buff.append(".");
               response.getWriter().print(buff.toString());
           } catch (JDOMException e) {
               response.getWriter().print(
                       "Error getting search terms: " + e.getMessage());
           }
       }
   }
   public void init() throws ServletException {
       try {
           nameXPath = XPath.newInstance("/search/name/text()");
           yearXPath = XPath.newInstance("/search/year/text()");
       } catch (JDOMException e) {
           throw new ServletException("Unable to create XPaths", e);
       }
       super.init();
   }

}


 </source>
   
  
 
  



XPath with JDOM

   <source lang="java">
  

import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import org.jdom.Document; import org.jdom.Element; import org.jdom.Namespace; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath; public class MainClass {

 public static void main(String[] args) throws Exception {
   Namespace NS_GUEST = Namespace.getNamespace("g", "uri:c:guest");
   Namespace NS_SCHEDULE = Namespace.getNamespace("s", "uri:c:schedule");
   SAXBuilder builder = new SAXBuilder();
   Document document = builder.build(new File("tds_ns.xml"));
   XPath xPath = XPath.newInstance("/s:schedule/s:show[@date=$date]/g:guest");
   xPath.addNamespace(NS_SCHEDULE);
   xPath.addNamespace(NS_GUEST);
   String formattedDate = new SimpleDateFormat("MM.dd.yy").format(new Date(2006, 5, 14));
   xPath.setVariable("date", formattedDate);
   Element guest = (Element) xPath.selectSingleNode(document);
   System.out.println(guest.getChildText("name", NS_GUEST));
 }

}


 </source>