xsl 里增加
function valueOf(context, elem) {
return tools.valueOf(context, elem);
}
代碼里增加
public String valueOf(XSLProcessorContext context, ElemExtensionCall elem) {
String value = elem.getAttribute("select");
String maxStr = elem.getAttribute("max");
try {
value = executeExpression(context, elem, value);
} catch (TransformerException e) {
}
if (isNotBlank(maxStr)) {
try {
int max = Integer.parseInt(maxStr);
value = shortStr(value, max);
} finally {
}
}
return value;
}
private String executeExpression(XSLProcessorContext context, ElemExtensionCall elem, String value)
throws TransformerException {
XPathContext xctxt = context.getTransformer().getXPathContext();
XPath path = new XPath(value, elem, xctxt.getNamespaceContext(), XPath.SELECT);
XObject data = path.execute(xctxt, context.getContextNode(), elem);
if (data != null)
value = data.xstr().toString();
return value == null ? "" : value;
}
參考了下面的文檔
[prev in list] [next in list] [prev in thread] [next in thread]
List: xalan-j-users
Subject: Re: Extension element with subelements
From: John Gentilin <gentijo () eyecatching ! com>
Date: 2007-09-07 21:48:37
Message-ID: 46E1C735.2080504 () eyecatching ! com
[Download message RAW]
Oops... this might be what you are after instead...
executeChildTemplatesToXML or ToString or ToXMLString
may be what you are after..
/**
* A repository for common functions that can be used but the extension
* functions and extension elements.
*
*
* Title: Base Functions
* Copyright: Copyright (c) 2005
* Company: Eye Catching Solutions Inc.
* @version 1.0
* @author John Gentilin
*/
public class BaseFunctions
{
private static Category m_Log =
Category.getInstance("RapidXSL.Interface");
private static DocumentBuilderFactory m_dfactory = null;
private static DocumentBuilder m_docBuilder = null;
/**
* @param context
* @param elem
* @throws TransformerException
*/
protected void executeChildTemplates( XSLProcessorContext context,
ElemExtensionCall elem ) throws TransformerException
{
TransformerImpl transf = context.getTransformer();
transf.executeChildTemplates(elem,
context.getContextNode(),
context.getMode(), transf.getResultTreeHandler());
}
/**
* @param context
* @param elem
* @throws TransformerException
*/
protected Document executeChildTemplatesToXML(Document doc,
XSLProcessorContext context, ElemExtensionCall elem ) throws
XMLServerException
{
DOMBuilder builder = null;
TransformerImpl transformer = context.getTransformer();
try
{
builder = new DOMBuilder(doc);
transformer.executeChildTemplates(elem,
context.getContextNode(),
context.getMode(), builder);
}
catch (Exception e)
{
throw new XMLServerException("RXSL_IFACE", "XSL Interface Error -
" + e.getLocalizedMessage());
}
return doc;
}
/**
* @param context
* @param elem
* @throws TransformerException
*/
protected String executeChildTemplatesToString(XSLProcessorContext
context, ElemExtensionCall elem ) throws XMLServerException
{
TransformerImpl transformer = context.getTransformer();
try
{
TextSerializationHandler handler = new TextSerializationHandler();
transformer.executeChildTemplates(elem,
context.getContextNode(),
context.getMode(), handler);
return handler.toString();
}
catch (Exception e)
{
throw new XMLServerException("RXSL_IFACE", "XSL Interface Error -
" + e.getLocalizedMessage());
}
}
protected String executeChildTemplatestoXMLString(XSLProcessorContext
context, ElemExtensionCall elem)
throws TransformerException, SAXException
{
try
{
TransformerImpl transformer = context.getTransformer();
// This should be worked on so that the output format can be
// defined by a first child of the redirect element.
OutputProperties format = transformer.getOutputFormat();
Properties prop = format.getProperties();
format.setProperty("indent","no");
format.setProperty("{[prev in list] [next in list] [prev in thread] [next in thread]
Configure | About | News | Donate | Add a list | Sponsors: 10East, KoreLogic, Terra-International, Chakpak.com
posted on 2009-10-21 17:19
哈哈的日子 閱讀(355)
評論(0) 編輯 收藏