// Text - Xalan extension element for inserting text package com.nwalsh.xalan; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.InputStream; import java.io.IOException; import java.io.FileNotFoundException; import java.net.URL; import java.net.MalformedURLException; import org.xml.sax.SAXException; import org.xml.sax.AttributeList; import org.xml.sax.ContentHandler; import org.w3c.dom.*; import org.apache.xerces.dom.*; import org.apache.xpath.objects.XObject; import org.apache.xpath.XPath; import org.apache.xpath.NodeSet; import org.apache.xalan.extensions.XSLProcessorContext; import org.apache.xalan.transformer.TransformerImpl; import org.apache.xalan.templates.StylesheetRoot; import org.apache.xalan.templates.ElemExtensionCall; import org.apache.xalan.templates.OutputProperties; import org.apache.xalan.res.XSLTErrorResources; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.TransformerException; /** *

Xalan extension element for inserting text * *

$Id: Text.java,v 1.1 2001/04/02 13:03:45 nwalsh Exp $

* *

Copyright (C) 2001 Norman Walsh.

* *

This class provides a * Xalan * extension element for inserting text into a result tree.

* *

Change Log:

*
*
1.0
*

Initial release.

*
* * @author Norman Walsh * ndw@nwalsh.com * * @version $Id: Text.java,v 1.1 2001/04/02 13:03:45 nwalsh Exp $ * */ public class Text { /** *

Constructor for Text

* *

Does nothing.

*/ public Text() { } public NodeList insertfile(XSLProcessorContext context, ElemExtensionCall elem) throws MalformedURLException, FileNotFoundException, IOException, TransformerException { String href = getFilename(context, elem); NodeSet textNodes = new NodeSet(); Document textDoc = DOMImplementationImpl.getDOMImplementation().createDocument(null, "tmpDoc", null); URL fileURL = null; try { try { fileURL = new URL(href); } catch (MalformedURLException e1) { try { fileURL = new URL("file:" + href); } catch (MalformedURLException e2) { System.out.println("Cannot open " + href); return null; } } InputStreamReader isr = new InputStreamReader(fileURL.openStream()); BufferedReader is = new BufferedReader(isr); char chars[] = new char[4096]; int len = 0; while ((len = is.read(chars)) > 0) { String s = new String(chars, 0, len); // Does it matter that this produces multiple, adjacent text // nodes? I don't think so... textNodes.addNode(textDoc.createTextNode(s)); } is.close(); } catch (Exception e) { System.out.println("Cannot read " + href); } return textNodes; } private String getFilename(XSLProcessorContext context, ElemExtensionCall elem) throws java.net.MalformedURLException, java.io.FileNotFoundException, java.io.IOException, javax.xml.transform.TransformerException { String fileName; fileName = ((ElemExtensionCall)elem).getAttribute ("href", context.getContextNode(), context.getTransformer()); if(fileName == null) { context.getTransformer().getMsgMgr().error(elem, "No 'href' on text, or not a filename"); } return fileName; } }