//---------------------------------------------------------------------------|| // xmlfromdom.java || // || // This code generates an XML document from a portion of a DOM tree. || //---------------------------------------------------------------------------|| // Written 17 February 2000 by Doug Tidwell. || //---------------------------------------------------------------------------|| // || // (C) Copyright IBM Corp. 1999, 2000. All rights reserved. || // || // US Government Users Restricted Rights Use, duplication or || // disclosure restricted by GSA ADP Schedule Contract with IBM Corp. || // || // The program is provided "as is" without any warranty express or || // implied, including the warranty of non-infringement and the implied || // warranties of merchantibility and fitness for a particular purpose. || // IBM will not be liable for any damages suffered by you as a result || // of using the Program. In no event will IBM be liable for any || // special, indirect or consequential damages or lost profits even if || // IBM has been advised of the possibility of their occurrence. IBM || // will not be liable for any third party claims against you. || // || //---------------------------------------------------------------------------|| import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.apache.xerces.parsers.*; public class xmlfromdom extends HttpServlet { Document doc = null; Element author = null; Element lines = null; Element title = null; public void initialize() { try { doc = (Document)Class. forName("org.apache.xerces.dom.DocumentImpl"). newInstance(); } catch (ClassNotFoundException cnfe) { System.err.println(cnfe); } catch (IllegalAccessException iae) { System.err.println(iae); } catch (InstantiationException ie) { System.err.println(ie); } if (doc != null) { Element root = doc.createElement("sonnet"); root.setAttribute("type", "Shakespearean"); author = doc.createElement("author"); Element lastName = doc.createElement("last-name"); lastName.appendChild(doc.createTextNode("Shakespeare")); author.appendChild(lastName); Element firstName = doc.createElement("first-name"); firstName.appendChild(doc.createTextNode("William")); author.appendChild(firstName); Element nationality = doc.createElement("nationality"); nationality.appendChild(doc.createTextNode("British")); author.appendChild(nationality); Element yearOfBirth = doc.createElement("year-of-birth"); yearOfBirth.appendChild(doc.createTextNode("1564")); author.appendChild(yearOfBirth); Element yearOfDeath = doc.createElement("year-of-death"); yearOfDeath.appendChild(doc.createTextNode("1616")); author.appendChild(yearOfDeath); root.appendChild(author); title = doc.createElement("title"); title.appendChild(doc.createTextNode("Sonnet 130")); root.appendChild(title); lines = doc.createElement("lines"); Element line01 = doc.createElement("line"); line01.appendChild(doc.createTextNode("My mistress' eyes are nothing like the sun,")); lines.appendChild(line01); Element line02 = doc.createElement("line"); line02.appendChild(doc.createTextNode("Coral is far more red than her lips red.")); lines.appendChild(line02); Element line03 = doc.createElement("line"); line03.appendChild(doc.createTextNode("If snow be white, why then her breasts are dun,")); lines.appendChild(line03); Element line04 = doc.createElement("line"); line04.appendChild(doc.createTextNode("If hairs be wires, black wires grow on her head.")); lines.appendChild(line04); Element line05 = doc.createElement("line"); line05.appendChild(doc.createTextNode("I have seen roses damasked, red and white,")); lines.appendChild(line05); Element line06 = doc.createElement("line"); line06.appendChild(doc.createTextNode("But no such roses see I in her cheeks.")); lines.appendChild(line06); Element line07 = doc.createElement("line"); line07.appendChild(doc.createTextNode("And in some perfumes is there more delight")); lines.appendChild(line07); Element line08 = doc.createElement("line"); line08.appendChild(doc.createTextNode("Than in the breath that from my mistress reeks.")); lines.appendChild(line08); Element line09 = doc.createElement("line"); line09.appendChild(doc.createTextNode("I love to hear her speak, yet well I know")); lines.appendChild(line09); Element line10 = doc.createElement("line"); line10.appendChild(doc.createTextNode("That music hath a far more pleasing sound.")); lines.appendChild(line10); Element line11 = doc.createElement("line"); line11.appendChild(doc.createTextNode("I grant I never saw a goddess go,")); lines.appendChild(line11); Element line12 = doc.createElement("line"); line12.appendChild(doc.createTextNode("My mistress when she walks, treads on the ground.")); lines.appendChild(line12); Element line13 = doc.createElement("line"); line13.appendChild(doc.createTextNode("And yet, by Heaven, I think my love as rare")); lines.appendChild(line13); Element line14 = doc.createElement("line"); line14.appendChild(doc.createTextNode("As any she belied with false compare.")); lines.appendChild(line14); root.appendChild(lines); doc.appendChild(root); } } /** Prints the specified node, recursively. */ public void printDOMTree(Node node, PrintWriter out) { int type = node.getNodeType(); switch (type) { // print the document element case Node.DOCUMENT_NODE: { printDOMTree(((Document)node).getDocumentElement(), out); break; } // print element with attributes case Node.ELEMENT_NODE: { out.print("<"); out.print(node.getNodeName()); NamedNodeMap attrs = node.getAttributes(); for (int i = 0; i < attrs.getLength(); i++) { Node attr = attrs.item(i); out.print(" " + attr.getNodeName() + "=\"" + attr.getNodeValue() + "\""); } out.print(">"); NodeList children = node.getChildNodes(); if (children != null) { int len = children.getLength(); for (int i = 0; i < len; i++) printDOMTree(children.item(i), out); } break; } // handle entity reference nodes case Node.ENTITY_REFERENCE_NODE: { out.print("&"); out.print(node.getNodeName()); out.print(";"); break; } // print cdata sections case Node.CDATA_SECTION_NODE: { out.print(""); break; } // print text case Node.TEXT_NODE: { out.print(node.getNodeValue()); break; } // print processing instruction case Node.PROCESSING_INSTRUCTION_NODE: { out.print(""); break; } } if (type == Node.ELEMENT_NODE) { out.print("'); } } // printDOMTree(Node, PrintWriter) public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (doc == null) initialize(); response.setContentType("text/xml"); PrintWriter out = response.getWriter(); Enumeration keys; String key; String requestedSubtree = ""; keys = request.getParameterNames(); while (keys.hasMoreElements()) { key = (String) keys.nextElement(); if (key.equalsIgnoreCase("subtree")) requestedSubtree = request.getParameter(key); } out.println(""); if (requestedSubtree.equalsIgnoreCase("author")) printDOMTree(author, out); else if (requestedSubtree.equalsIgnoreCase("lines")) printDOMTree(lines, out); else if (requestedSubtree.equalsIgnoreCase("title")) printDOMTree(title, out); else printDOMTree(doc, out); } }