通过XSLT访问Java代码

XSLT简单教程--XSLT的实例 XSLT如何转换XML我们打个有趣的比方,你玩过橡皮泥吧,用不同的模子按上去,就可以做出需要的形状。如果我们假设XML数据文档是一块大橡皮泥,XSLT就象是一个模子,用力一按,就做出需要的形状来---符合不同需要的HTML文档。具体看下面的过程示意图: 我们将XML原文档输入,用XSL作为模板,通过转换引擎,最终输出需要的HTML文档。其中的转换引擎就是比喻中"用力一按"的过程。在 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

假如你希望将XML数据转换为固定宽度和纯文本的字符串——这刚好是XSLT不太方便实现的一个特性,或者,也许你希望在XML文件中执行词语替换。在这些情况下,当你的事务超出了XSLT自身的处理能力时,可以通过在你的XSLT处理器中调用Java函数来完成。

我看到过利用类似VBScript和Jscript的脚本语言完成特殊处理的例子(针对微软解析器的),但是如何利用Java来执行特殊的处理还不是特别地明显。尽管如此,简单地说,可以在XSLT处理器中通过XML命名空间(namespaces)调用Java函数来实现。Java与XSLT的结合为构建健壮的应用程序提供了强有力的方法。

使用定制的命名空间

命名空间是通过使用统一资源标识符(URI)来修饰限定XSL中元素和属性名称的一种方法。例如,常见的XSL元素需要有xsl命名空间前缀来修饰,xsl通过使用XSLT命名空间URI来声明:

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

但是并不局限于使用XSLT命名空间,你完全可以自由地声明你自己定制的命名空间,并用它们来识别定制的XSLT标签和范围。

你必须使用定制的命名空间前缀来完成对外部函数的调用,例如,mynspace:fundtion(),该命名空间前缀mynspace,必须与一个命名空间URI相关联,例如:

xmlns:myspace="d:///XMLprogs/mynamespace"

一般的Java绑定使用命名空间URI标识Java类函数的位置。对用于本文示例代码的Xalan XSLT处理器(版本1.2.2)来说,命名空间URI必须具有URI-stem/packagename的形式。如果你使用了XT,那么你的命名空间应该有如下格式:

xmlns:mynspace="d://XMLprogs/mynamespace.myclassname

这种情况下,你可以使用XSLT代码调用来自myclassname的Java函数。

绑定外部Java函数

此处给出在XSLT模板内部绑定Java语言编写的外部函数的过程。

  • 将你自己定制的命名空间作为它们的属性添加到样式表(stylesheet)元素或者你的模板中。
  • 确保你的Java类文件所在目录位于你的XSLT处理器所运行的Java虚拟机(JVM)的CLASSPATH中。
  • 对于静态方法,可以使可以用完全合格的类名称加上方法和任何必需的的参数,当然还有命名空间前缀。
  • 对于非静态方法,首先创建类实例,然后调用该方法并提供任何必需的参数。

例如,下面的样式表元素包含一个定制的命名空间声明:

<?xml version=”1.0” encoding=”UTF-8”?>
<xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” xmlns:myspace=”d://XMLprogs/mynamespace”>

在声明了这个命名空间后,可以访问该类的任何静态方法,像这样:

<xsl:variable name=”funvalue”select=”mynspace:classname.function()”/>

如果方法不是静态的,那么必须首先调用类构造器,例如:

<xsl:variable name="funvalue" select="mynspace.classname.new()"/>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="d://XMLprogs/mynamespace" exclude-result-prefixes="java">

Java包"mynamespace"必须位于"d://XMLprogs"目录中。

注意:使用可选属性xsl:exclude-result-prefixes,预防了java命名空间被包括到结果文档中。

<xsl:template match="/">
<html>
<body>
<p>
<xsl:value-of select="java:DateClass.displayDate()"/>
</p>
</body>
</html>
</xsl:template>

上面的XSLT代码中,<xsl:value-of select="java:DateClass.displayDate()"/>行调用位于mynamespace包中名为DateClass的类的静态方法displayDate()。

利用这种技术,你可以调用任何Java类方法——包括那些需要参数的方法——参数来自于你的XSLT模板。

本文涉及的代码:date.xsl

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"xmlns:java="d://XMLprogs/mynamespace" exclude-result-prefixes="java">
<xsl:template match="/">
<html>
<body>
<p>
<xsl:value-ofselect="java:DateClass.displayDate()" />
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

DateClass.java

packagemynamespace;
importjava.util.Date;
public class DateClass{
public static String displayDate(){
Date d = new Date();
returnd.toString();
}
}

要运行这些代码,需要:

  1. 创建文件夹"d:/XMLProgs/mynamespace"。
  2. 将DateClass.java文件放入上述路径并编译得到DateClass.class文件。
  3. 将"d:/XMLProgs/mynamespace"放入classpath变量中。
  4. 利用XSLT处理器,例如XT或XALAN将该XSL文件和具体的XML文件关联。

责任编辑:小李(lisz@staff.ccidnet.com)

Java与XSLT源码示例 本文还有配套的精品资源,点击获取 简介:Java和XSLT是处理XML数据的关键技术,本资源通过Java操作XSLT的源代码示例,详细展示两种技术如何协同工作。Java通过提供DOM、SAX和JAXB库等工具处理XML,而XSLT则负责转换XML文档。结合使用时,Java可以执行XSLT转换,实现XML数据的格式转换和信息提取。源码中还可能包含使用Apache POI库操作... 阅读详情

相关推荐

Java环境中的XML到XSLT转换技术指南

Java API for XML Processing (JAXP) 是一个用于处理XML文档的Java API集合。它包含解析XML文档的能力,并提供一个将XML文档转换为其他格式(如HTML, PDF, 文本文件等)的能力。JAXP的核心特性是不依赖于特定的解析器实现,使得开发者可以在多种解析器之间切换而不需要改变代码,比如从DOM4J切换到Xerces或反之。

weixin_42613018的博客 1072

xslt调用java方法

在stylesheet标签里声明命名空间和调用方法: ...... ${path}随便怎样写都可以,即使是个不存在的path也可以,但必须保证最后一个packageName是java的classpath中的第一个包,例如包名为:process,类名为:processor,方法为:format。则xslt这样写: ...... 在某文件夹下(例如D:/

mocom的专栏 2853

XSLT 调用 Java 的类方法

XSLT 调用 Java 的类方法XSLT 调用 Java 的类方法

Java中的XSL转换:一种简单的方法

XSL转换 (XSLT)是将一个XML文档转换为另一个XML文档的强大机制。 但是,在Java中,XML操作相当冗长和复杂。 即使是简单的XSL转换,也必须编写几十行代码—如果需要适当的异常处理和日志记录,甚至可能还要写更多的代码。 jcabi-xml是一个小型开放源代码库,它通过使用一些简单的方法启用XML解析和XPath遍历,使生活变得更加轻松。 让我们看看该库如何帮助XSL转换。 ...

最佳 Java 编程 1468

xslt中调用java

xslt中调用java

仿真每日一练 | 有限元模态分析详解

结构的振动一直是工业领域产品分析的重点,在振动的仿真分析中,模态分析是其最基本的分析类型,通过研究结构的固有频率和振型对产品的设计提供指导。2.2、在interaction模块,通过special->Spring,在各点之间分别创建弹簧单元,弹簧刚度为1000。2.1、在interaction模块,创建两个RP点,与两侧RP点各间隔100大小,如图3所示;其中M、K、C均为n*n的矩阵,s、x、v为n*1的矢量,n为系统自由度数量。3、在Assembly模块创建装配体,两点之间的距离为100,如图2所示;

ansysxuexizhe的博客 1656

XSLT调用JS或者JAVA

XSLT调用JS  http://www.ibm.com/developerworks/cn/xml/tips/x-tipxsltjs/index.htmlXSLT调用JAVA  http://unmi.cc/xslt-call-java-method package org.lvsenlin; import java.text.SimpleDateFormat; import j...

senlin 475

Python+Selenium实战:5分钟搞定快手评论区数据采集(附完整代码)

本文详细介绍了如何使用Python和Selenium快速采集快手评论区数据,提供完整的代码实现和优化方案。通过动态加载处理和智能等待策略,5分钟内即可构建高效的评论采集工具,适用于用户行为分析和内容挖掘等场景。

weixin_30415113的博客 344

java xslt xml to xml_通过XSLT访问Java代码[转]_xml

假如你希望将xml数据转换为固定宽度和纯文本的字符串――这刚好是XSLT不太方便实现的一个特性,或者,也许你希望在XML文件中执行词语替换。在这些情况下,当你的事务超出了XSLT自身的处理能力时,可以通过在你的XSLT处理器中调用java函数来完成。我看到过利用类似VBScript和jscript的脚本语言完成特殊处理的例子(针对微软解析器的),但是如何利用Java来执行特殊的处理还不是特别地明显...

weixin_39580748的博客 160

WinForm轻松打造AntDesign现代化工具栏

摘要: 本文介绍如何在WinForm中利用AntdUI库实现AntDesign风格工具栏,包括安装配置、动态生成按钮/下拉菜单、布局优化及主题美化。通过AntButton、AntDropdown等控件结合事件绑定,可快速构建支持图标、工具提示、权限控制的现代化工具栏,并解决常见图标加载、布局错乱问题。最后提供代码示例与响应式设计技巧,助你打造高效美观的WinForm界面。 (字数:150)

java专栏 1595

地理空间坐标系统-不同椭球基准间的坐标转换

基于同一个椭球基准,可以构建三类地理空间坐标系:大地球面坐标系、大地空间直角坐标系、大地投影坐标系。由于坐标原点和椭球长短半径等都相同,这三类坐标系之间可以通过无损的数学方法相互之间进行转换。那么现在问题来了,不同椭球基准(在全球范围来看存在成百上千的椭球基准)之间的坐标怎么转换?比如,北京54、西安80、国家2000,特别是在我国,现在主推国家2000坐标系,那么如何将历史的测绘成果(北京54和...

技术改变世界 8336

xml xlst java_在java代码中,用xslt处理xml文件

http://blog.youkuaiyun.com/zhou_lei/article/details/2661735**************************************************************用java处理xml文件的方法很多,很多人觉得用起来有点复杂.所以这里提供一个在java代码中引用xslt文件处理xml文件的方法.package testxslt;im...

weixin_34175978的博客 388

避坑指南:C#用S7NetPlus读写西门子PLC字符串(String/WString)的完整方案

本文详细解析了C#通过S7NetPlus读写西门子PLC字符串(String/WString)的完整方案,包括内存布局、编码差异和字节序处理等关键技术细节。提供了实战优化的代码示例和常见问题排查指南,帮助开发者避免乱码、截断等常见陷阱,提升工业自动化项目的开发效率。

weixin_32956805的博客 323

java api for xml_Java原生API操作XML

使用Java操作XML的开源框架比较多,如著名的Dom4J、JDOM等,但个人认为不管你用那个框架都要对JDK原生的API有所了解才能更得心应手的应用。本篇就来简单了解下原生的XML API。JAVA的XML APIXML的开放性和Java的开源性注定它们是一种完美结合,因此Sun提供了一套专门用于处理XML的Java API:JAXP,JAXP遵循XML的两种解析标准:DOM(Document ...

weixin_36219784的博客 351

MIPI C-PHY介绍(Specification for C-PHY V1.2)

本文档描述了一个名为C-PHY的高速串行接口,它在带宽有限(bandwidth limited channels,看的有人说C的含义就是channel limit)的通道上提供高吞吐量性能,用于连接到外设,包括显示器和摄像头。首先0x4fff在0x4000~0x4fff区域,则f=(0,0,0,0,0,0,1),顺序是S6~S1;最后,端到端的传输过程是什么样呢,如下图所示,16bit先转换成7个符号(每个符号3位,共21位),然后并行数据转换成串行数据,输送到符号编码器和3个线的驱动器,接收端流程相反。

qflook的博客 5884

【深度学习新浪潮】Harness Engineering 入门实战必看|6个从零可跑开源项目,新手快速上手垂域AI工程落地

很多同学入门 AI Agent、做大模型垂域落地时,都会卡在同一个痛点:只会调用模型、写简单Prompt,却不懂如何做约束管控、流程护栏、任务编排、多智能体边界隔离。而这正是的核心价值。不同于纯理论概念,Harness Engineering 更偏向工程实战,新手不用啃复杂论文,从开源项目动手实操是最高效的学习方式。本文从零基础易上手、可本地一键部署、支持二次改造做实战项目。

专注:太空算力、AI infra、异构调度、大模型成本工程 234

Using Xalan's XPath API to Access XML Data

From Wikipedia, the free encyclopedia. Table of contentsshowTocToggle("show","hide") [showhide] 1 Abstract2 XPath3 Xalan3.1 Xalan XPath API4 Example 14.

umljsp的专栏 8436

基于YOLOv8深度学习的火焰与烟雾检测系统详解:UI界面 + YOLOv8 + 数据集的实现

通过自动化检测火焰和烟雾,可以提高响应速度,减少潜在的火灾损失,保障人身和财产安全。此外,应用还会显示标记了检测框的视频画面,方便用户直观了解检测效果。同时,前端界面将使用Streamlit来实现,因其可以快速搭建交互式应用,适合我们的需求。要训练一个有效的火焰和烟雾检测模型,我们需要一个包含火焰和烟雾图片的数据集。为了保证模型的准确性和泛化能力,建议收集至少500张火焰和烟雾的图片,保证数据的多样性和代表性。训练过程中,模型会输出每个Epoch的训练损失和验证准确率,便于我们监控模型的学习情况。

YOLO 1322

CVE-2025-61882 漏洞复现

该漏洞源于Oracle E-Business Suite在处理用户请求时,多个组件存在安全缺陷:UiServlet未对用户提供的XML参数进行充分验证,导致SSRF漏洞;后续处理过程中缺乏对CRLF注入的有效防护,使攻击者可操纵HTTP请求;内部服务绑定配置不当及路径遍历防护不足,导致认证绕过;最终通过XSLT处理器加载恶意样式表时缺乏安全限制,实现远程代码执行。

Biodog的博客 817

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[代码生成] 使用Java与XSLT的10条技巧

使用Java与XSLT的10条技巧 作者:Eric M. Burke翻译:家居猫文章来源:http://www.javaidea.net/list.jsp?topic=30    在我的新书《Java and XSLT》中介绍了Java与XSLT的技术组合。这篇文章从书中选出了我认为非常重要的10条技巧。但实际上这有限的10条只是粗略的描述了什么是可能的。其中大多数都集

优快云 3147

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

在xmlspy中使用java的xslt转换

在xmlspy中使用java的xslt转换.我喜欢在xmlspy中来写xml, xsl, xsd, 并且用xmlspy自带的xslt工具或者利用msxml来查看xslt转换结果. 在实际使用中发现尽管xmlspy的xslt有些小bug, 但是它能提供具体的错误位置, 排错很方便. Java下有xalan和saxon都可以做xslt转换. saxon除了支持标准的xslt1.0, 还部分

steeven的专栏 3307

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

在java代码中,用xslt处理xml文件

用java处理xml文件的方法很多,很多人觉得用起来有点复杂.所以这里提供一个在java代码中引用xslt文件处理xml文件的方法.import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileWriter;import jav

周雷的专栏 4172

java xslt,java xslt教程

Can any one suggest good XSLT with java tutorials?解决方案There are three steps to learning XSLT on Java:1- Pick a XSLT engine.Each engine is slightly different, but for basic processing any will do.Xalan...

weixin_36473398的博客 307

java xml xslt_XML和XSLT实现代码生成器

comes from networkXML和XSLT实现代码生成器(I)摘要XML和XSLT为开发WEB应用提供了非常好的解决方案,然而,它们的能力不仅限制在WEB开发上,其实它们提供了很好的基于元数据(meta data)编程的模型,利用XML作为元数据并用XSLT就可以将它转换为任何想要的形式或其他数据。本文第一部分介绍了如何利用Java以及XML和XSLT实现代码生成器功能,,第二部分讨论了...

weixin_36294922的博客 460
上一篇: Apache ApacheJserv gnujsp之完全攻略
下一篇: 在Linux上安装JDK
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值