| Home >> All >> com >> tripi >> asp >> [ msxml2 Javadoc ] |
Source code: com/tripi/asp/msxml2/DOMUtils.java
1 /* 2 * Created on Mar 15, 2003 3 * 4 * To change this generated comment go to 5 * Window>Preferences>Java>Code Generation>Code Template 6 */ 7 package com.tripi.asp.msxml2; 8 9 import java.io.ByteArrayOutputStream; 10 import java.io.StringReader; 11 import java.util.Collection; 12 import java.util.Iterator; 13 import java.util.List; 14 import java.util.Vector; 15 16 import javax.xml.transform.Transformer; 17 import javax.xml.transform.TransformerFactory; 18 import javax.xml.transform.URIResolver; 19 import javax.xml.transform.stream.StreamResult; 20 import javax.xml.transform.stream.StreamSource; 21 22 import org.jdom.Attribute; 23 import org.jdom.Document; 24 import org.jdom.Element; 25 import org.jdom.Namespace; 26 import org.jdom.output.XMLOutputter; 27 28 /** 29 * @author jhorner 30 */ 31 public class DOMUtils { 32 33 public static Element convertToJdom(DOMNode mselement) { 34 35 Element result = null; 36 if (mselement._NodeType.toString().equals("element")) { 37 38 // remove any prefixes 39 String name = mselement._NodeName.replaceAll(".*:", ""); 40 result = new Element(name); 41 result.setNamespace( 42 Namespace.getNamespace( 43 mselement._Prefix, 44 mselement._NamespaceURI)); 45 46 // set the attributes 47 if (mselement.Attributes() != null) { 48 List attrs = convertToJdomAttributes(mselement); 49 if (attrs != null) { 50 result.setAttributes(attrs); 51 } 52 } 53 54 // add the children 55 Collection children = mselement._ChildNodes.Items(); 56 Iterator it = children.iterator(); 57 while (it.hasNext()) { 58 59 // check for a text child 60 DOMNode child = (DOMNode) it.next(); 61 if (child._NodeType.toString().equals("text")) { 62 result.setText(child.NodeValue().toString()); 63 } 64 else { 65 Element domchild = convertToJdom(child); 66 if (domchild != null) { 67 result.addContent(convertToJdom(child)); 68 } 69 } 70 } 71 } 72 73 return result; 74 } 75 76 public static List convertToJdomAttributes(DOMNode mselement) { 77 List result = new Vector(); 78 79 Collection attributes = mselement._Attributes.Items(); 80 Iterator it = attributes.iterator(); 81 while (it.hasNext()) { 82 DOMNode attribute = (DOMNode) it.next(); 83 84 String value = ""; 85 Object myobj = attribute.NodeValue(); 86 if (myobj != null) { 87 value = myobj.toString(); 88 } 89 Attribute attr = new Attribute(attribute._NodeName, value); 90 result.add(attr); 91 } 92 93 return result; 94 } 95 96 public static DOMElement convertToMs(Element element) throws Exception { 97 98 DOMElement result = new DOMElement(); 99 100 // create the initial element 101 result._NodeName = element.getQualifiedName(); 102 result._Prefix = element.getNamespacePrefix(); 103 result._NamespaceURI = element.getNamespaceURI(); 104 result._NodeType = new DOMNodeType("element"); 105 106 // create the text child 107 String nodetext = element.getText(); 108 if (nodetext != null) { 109 DOMNode textnode = new DOMNode(); 110 textnode._NodeType = new DOMNodeType("text"); 111 textnode.NodeValue(element.getText()); 112 result.AppendChild(textnode); 113 } 114 115 // add the attributes 116 result._Attributes = convertToMsAttributes(element); 117 118 // add the children 119 List children = element.getChildren(); 120 Iterator it = children.iterator(); 121 while (it.hasNext()) { 122 Element child = (Element) it.next(); 123 124 // recurse through the children 125 result._ChildNodes.AppendNode(convertToMs(child)); 126 } 127 128 return result; 129 } 130 131 public static DOMNamedNodeMap convertToMsAttributes(Element element) 132 throws Exception { 133 134 DOMNamedNodeMap attributes = new DOMNamedNodeMap(); 135 List list = element.getAttributes(); 136 Iterator it = list.iterator(); 137 while (it.hasNext()) { 138 139 Attribute attr = (Attribute) it.next(); 140 DOMNode node = new DOMNode(); 141 node._NodeName = attr.getQualifiedName(); 142 node._NodeType = new DOMNodeType("attribute"); 143 node.NodeValue(attr.getValue()); 144 145 // add this attribute 146 attributes.SetNamedItem(node); 147 } 148 149 return attributes; 150 } 151 152 public static String transform( 153 String pathprefix, 154 String basefile, 155 Document xmlDoc, 156 Document xslDoc) 157 throws Exception { 158 159 try { 160 161 // Get the the generated Transformer (processed stylesheet Source) 162 TransformerFactory tfactory = TransformerFactory.newInstance(); 163 DOMURIResolver resolver = new DOMURIResolver(); 164 resolver.setPathprefix(pathprefix); 165 resolver.setBasefilename(basefile); 166 tfactory.setURIResolver(resolver); 167 168 XMLOutputter xslOut = new XMLOutputter(); 169 StringReader xslReader = 170 new StringReader(xslOut.outputString(xslDoc)); 171 Transformer transformer = 172 tfactory.newTransformer(new StreamSource(xslReader)); 173 // Create an XML Source by outputting the JDOM Document to a Reader 174 XMLOutputter xmlOut = new XMLOutputter(); 175 StringReader xmlReader = 176 new StringReader(xmlOut.outputString(xmlDoc)); 177 StreamSource source = new StreamSource(xmlReader); 178 179 // create a stream to be used as a buffer for the Result object 180 ByteArrayOutputStream htmlbuf = new ByteArrayOutputStream(); 181 182 // Use the Transformer to transform the XML Source and send the 183 // output to a Result object. 184 transformer.transform(source, new StreamResult(htmlbuf)); 185 186 // convert the byte stream to a string and close the stream 187 String html = htmlbuf.toString(); 188 htmlbuf.close(); 189 return html; 190 } 191 catch (Exception e) { 192 193 throw new Exception( 194 "XMLTransformation::transform - " + e.getMessage()); 195 } 196 197 } 198 199 }