Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }