java 是否支持在 xslt 中使用 EXSLT custom fuction

keshuichonglx keshuichonglx 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在使用java做一个xslt的过程中遇到xsl文件中存在是使用custom fuction的情况,我仍然采用javax.xml.transform.Transformer和javax.xml.transform.TransformerFactory进行处理,但是报出了以下错误:

ERROR: '非 static Java 函数 'listFind' 的第一个参数不是有效的对象引用。'
FATAL ERROR: '无法将数据类型 'void' 转换为 'boolean'。'
:无法将数据类型 'void' 转换为 'boolean'。

望各位大神给予大力技术支持,急,谢谢!

下面是例子的相关数据:

xsl文件代码

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:transform
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ben="http://www.bennadel.com/xslt"
xmlns:func="http://exslt.org/functions"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="func str ben">

<func:function
name="ben:list-find"
ben:return-type="boolean"
ben:hint="I take a delimited list and a value and return true or false as to whether that value is a list item in the given list.">

<!-- Define arguments. -->
<xsl:param
name="list"
ben:type="string"
ben:required="true"
ben:hint="I am the delimited list of values that is being searched."
/>

<xsl:param
name="value"
ben:type="string"
ben:required="true"
ben:hint="I am the value for which we are searching in the above list."
/>

<xsl:param
name="delimiters"
select="','"
ben:type="string"
ben:required="false"
ben:hint="I am the collection of delimiters used to deliniate the list values. I can be one or more characters (each character is used as a valid delimiter). I am defaulted to the comma."
/>

<xsl:variable
name="tokens"
select="str:tokenize( $list, $delimiters )"
/>


</func:function>


<!-- Match the root girls node. -->
<xsl:template match="/girls">

<girls>

<xsl:copy-of
select="./girl[ ben:list-find( 'athletic,hot', @type ) ]"
/>

</girls>

</xsl:template>

</xsl:transform>


xml文件代码:

<?xml version="1.0"?>
<girls>
<girl type="cute">
<name>Sarah</name>
</girl>
<girl type="athletic">
<name>Tricia</name>
</girl>
<girl type="hot">
<name>Katie</name>
</girl>
<girl type="cute">
<name>Libby</name>
</girl>
</girls>


java代码如下(参数xml_text为xml文本数据,参数xsl_stylesheet_path为xsl文件路径):

static Transformer m_transformer ;
static String m_strLastXslPath = "" ;
public static String xsl_transform_with_stylesheet(String xml_text ,String xsl_stylesheet_path){
String strRet = null ;
try {
//
TransformerFactory ddd = TransformerFactory.newInstance() ;
if ( m_strLastXslPath != xsl_stylesheet_path ){ //xsl
StreamSource SourceXsl = new StreamSource(xsl_stylesheet_path) ;
m_transformer = ddd.newTransformer (SourceXsl);

m_strLastXslPath = xsl_stylesheet_path;
}

//xml
ByteArrayInputStream bisXml = new ByteArrayInputStream(xml_text.getBytes());
StreamSource SourceXml = new StreamSource(bisXml) ;

//html ouput
ByteArrayOutputStream bosHtml = new ByteArrayOutputStream();
Result ResultHtml = new StreamResult( bosHtml );

//do it
m_transformer.transform(SourceXml, ResultHtml);
strRet = bosHtml.toString();
}
catch (TransformerConfigurationException e) {
e.printStackTrace( );
}
catch (Exception e) {
e.printStackTrace( );
}
return strRet ;
}
...全文

相关推荐

创新!高级!【日前、日内非滚动、日内滚动调度以及实时修正】考虑需求侧响应的智慧楼宇多时间尺度调度策略(Matlab代码实现)

创新!高级!【日前、日内非滚动、日内滚动调度以及实时修正】考虑需求侧响应的智慧楼宇多时间尺度调度策略(Matlab代码实现)内容概要:本文介绍了一种考虑需求侧响应的智慧楼宇多时间尺度调度策略,涵盖日前、日内非滚动、日内滚动调度以及实时修正四个阶段,旨在通过Matlab代码实现对智慧楼宇能源系统的优化管理。该策略结合需求侧响应机制,提升能源利用效率与系统运行经济性,适用于新能源背景下的智能建筑能源调度场景。; 适合人群:具备一定电力系统或能源管理基础知识,熟悉Matlab编程,从事科研或工程应用的研究人员与技术人员。; 使用场景及目标:① 实现智慧楼宇在多时间尺度下的精细化能源调度;② 探索需求侧响应在楼宇级能源管理系统中的建模与应用;③ 借助Matlab仿真平台完成调度策略的开发、测试与优化。; 阅读建议:建议读者结合Matlab代码与相关电力系统调度理论,逐步理解各调度阶段的建模逻辑,重点关注优化目标函数与约束条件的设计,同时推荐通过案例仿真验证策略的有效性。

荔枝科研社

Vue3 + Flask + MQTT:构建智慧医院患者服务大厅

Vue3 + Flask + MQTT:构建智慧医院患者服务大厅,mysql+flask+mqtt客服+ai

速易达网络

论文复现带有攻击角约束的大机动目标协同攻击制导律(Simulink仿真、Matlab代码实现)

内容概要:本文介绍了一个名为“带有攻击角约束的大机动目标协同攻击制导律”的Matlab/Simulink仿真项目,旨在通过复现相关学术论文中的制导算法,实现对高速、大机动目标的多导弹协同攻击,并满足特定的攻击角度要求。该资源详细提供了Simulink仿真模型和配套的Matlab代码,涉及超扭滑模(STSMC)、快速终端滑模(FTSMC)等先进控制算法的应用,以确保制导律的精确性、鲁棒性及多弹协同的同时攻击性能。项目不仅涵盖算法的数学建模与控制逻辑实现,还通过三维空间仿真验证了针对强机动目标的制导有效性。; 适合人群:具备Matlab/Simulink基础操作能力,从事或研究飞行器制导、导航与控制(GNC)、自动化、航空航天工程、兵器科学与技术等相关领域的研究生、科研人员及工程师。; 使用场景及目标:① 学习和复现带有攻击角约束的协同攻击制导算法;② 研究和对比不同滑模控制技术(如STSMC, FTSMC)在制导系统中的性能表现;③ 利用提供的仿真模型和代码进行二次开发、算法优化及拓展至三维多弹协同攻击场景。; 阅读建议:使用者应结合相关论文的理论部分,仔细阅读和调试所提供的Matlab代码与Simulink模型,重点关注制导律的设计逻辑、各模块之间的信号传递关系以及关键控制参数的设置与整定,以深入理解多弹协同制导与攻击角约束的实现原理。

吃兔子的大脑腐

新能源纯电动汽车驾驶员模块、整车控制器、减速器模块、车速模块等建模Simulink仿真模型

内容概要:本文档提供了新能源纯电动汽车多个关键模块的Simulink仿真模型资源,涵盖驾驶员模块、整车控制器、减速器模块、车速模块等核心子系统,通过模块化建模仿真手段,完整呈现了电动汽车动力传动与控制系统的动态响应机制与交互逻辑。资源不仅包括各独立模块的精细化建模,还涉及系统级集成与联合仿真,适用于开展整车性能分析、控制策略验证及能量管理优化等科研任务,旨在为新能源汽车领域的教学研究与工程开发提供可靠的技术参考与仿真平台支撑。; 适合人群:具备一定自动化、电气工程或车辆工程背景,从事新能源汽车系统仿真、控制算法开发等相关工作的研究人员、高校师生及工程技术人员。; 使用场景及目标:①用于新能源汽车动力系统建模与仿真教学实验;②支撑整车控制策略(如扭矩分配、能量回收)的设计与验证;③作为科研项目中系统级仿真平台的基础组件,提升开发效率与仿真精度; 阅读建议:建议使用者结合实际研究需求,深入理解各模块内部结构与参数设置,灵活调整模型以适配不同工况,并利用提供的完整资源目录进一步拓展学习与应用范围。

稷下科研社

imooc JAVA入门第二季 第五章 《天气预报项目的实现》 ,更新API修复bug的jar包

学习 imooc JAVA 入门第二季 《天气预报项目的实现》时,发现课件中的 jar 包因 API 更新已失效。我已修复相关 bug 并更新 jar 包,方便后续学习者直接使用。 AppCode申请地址: https://market.aliyun.com/detail/cmapi033126#sku=yuncode27126000010

qq_540927650
评论
收藏 已收藏
分享
返回顶部
keshuichonglx
Web 开发 81,108 成员 341,721 内容