Author: adrianc
Date: Wed Jul 1 23:28:55 2009
New Revision: 790420
URL: http://svn.apache.org/viewvc?rev=790420&view=rev
Log:
Added a UEL function to convert a DOM Node to an HTML String.
Modified:
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java
Modified:
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java?rev=790420&r1=790419&r2=790420&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java
(original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java
Wed Jul 1 23:28:55 2009
@@ -18,6 +18,7 @@
*******************************************************************************/
package org.ofbiz.base.util.string;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
@@ -32,6 +33,8 @@
import java.util.TimeZone;
import javax.el.FunctionMapper;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamSource;
import javolution.util.FastMap;
@@ -142,6 +145,7 @@
* <tr><td colspan="2"><b><code>dom:</code> contains
<code>org.w3c.dom.*</code> functions</b></td></tr>
* <tr><td><code>dom:readHtmlDocument(String)</code></td><td>Reads an HTML
file and returns a <code>org.w3c.dom.Document</code> instance.</td></tr>
* <tr><td><code>dom:readXmlDocument(String)</code></td><td>Reads an XML file
and returns a <code>org.w3c.dom.Document</code> instance.</td></tr>
+ * <tr><td><code>dom:toHtmlString(Node, String encoding, boolean indent, int
indentAmount)</code></td><td>Returns a <code>org.w3c.dom.Node</code> as an HTML
<code>String</code>.</td></tr>
* <tr><td><code>dom:toXmlString(Node, String encoding, boolean
omitXmlDeclaration, boolean indent, int indentAmount)</code></td><td>Returns a
<code>org.w3c.dom.Node</code> as an XML <code>String</code>.</td></tr>
* <tr><td><code>dom:writeXmlDocument(String, Node, String encoding, boolean
omitXmlDeclaration, boolean indent, int indentAmount)</code></td><td>Writes a
<code>org.w3c.dom.Node</code> to an XML file and returns <code>true</code> if
successful.</td></tr>
* </table>
@@ -249,6 +253,7 @@
this.functionMap.put("util:urlExists",
UelFunctions.class.getMethod("urlExists", String.class));
this.functionMap.put("dom:readHtmlDocument",
UelFunctions.class.getMethod("readHtmlDocument", String.class));
this.functionMap.put("dom:readXmlDocument",
UelFunctions.class.getMethod("readXmlDocument", String.class));
+ this.functionMap.put("dom:toHtmlString",
UelFunctions.class.getMethod("toHtmlString", Node.class, String.class,
boolean.class, int.class));
this.functionMap.put("dom:toXmlString",
UelFunctions.class.getMethod("toXmlString", Node.class, String.class,
boolean.class, boolean.class, int.class));
this.functionMap.put("dom:writeXmlDocument",
UelFunctions.class.getMethod("writeXmlDocument", String.class, Node.class,
String.class, boolean.class, boolean.class, int.class));
} catch (Exception e) {
@@ -475,6 +480,37 @@
return false;
}
+ public static String toHtmlString(Node node, String encoding, boolean
indent, int indentAmount) {
+ try {
+ StringBuilder sb = new StringBuilder();
+ sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+ sb.append("<xsl:stylesheet
xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"
xmlns:xalan=\"http://xml.apache.org/xslt\" version=\"1.0\">\n");
+ sb.append("<xsl:output method=\"html\" encoding=\"");
+ sb.append(encoding == null ? "UTF-8" : encoding);
+ sb.append("\"");
+ sb.append(" indent=\"");
+ sb.append(indent ? "yes" : "no");
+ sb.append("\"");
+ if (indent) {
+ sb.append(" xalan:indent-amount=\"");
+ sb.append(indentAmount <= 0 ? 4 : indentAmount);
+ sb.append("\"");
+ }
+ sb.append("/>\n<xsl:template match=\"@*|node()\">\n");
+ sb.append("<xsl:copy><xsl:apply-templates
select=\"@*|node()\"/></xsl:copy>\n");
+ sb.append("</xsl:template>\n</xsl:stylesheet>\n");
+ ByteArrayInputStream bis = new
ByteArrayInputStream(sb.toString().getBytes());
+ TransformerFactory transformerFactory =
TransformerFactory.newInstance();
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ UtilXml.transformDomDocument(transformerFactory.newTransformer(new
StreamSource(bis)), node, os);
+ os.close();
+ return os.toString();
+ } catch (Exception e) {
+ Debug.logError(e, "Error while creating HTML String ", module);
+ }
+ return null;
+ }
+
public static String toXmlString(Node node, String encoding, boolean
omitXmlDeclaration, boolean indent, int indentAmount) {
try {
ByteArrayOutputStream os = new ByteArrayOutputStream();