You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2009/07/02 01:28:55 UTC
svn commit: r790420 -
/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java
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();