研究问题:xslt
转换可以实现扩展函数,在
java
中如何使自定义的函数与之关联!
1.
XSLT处理器
1.1.
XSLT处理器本身的扩展功能
目前较常用的XSLT
处理器有
Saxon
(有
Java
和
.NET
两种版本)、
Xalan
(有
Java
和
C++
)两种版本
、MSXML
(可用于
Visual Basic
、
C++
和
JScript
脚本等)、
.NET
的
XSLT
处理器等。这些
XSLT
处理器都提供了各自的扩展功能。
说明:这些处理器的下载网址如 下:Saxon
(
http://saxon.sourcefourge.net
);
Xalan
(
http: //xalan.apache.org
);
MSXML
和
.NET
可以从微软公司的
MSDN
网站(
http://msdn.microsoft.com
)下 载。
1.2.
EXSLT(
XSLT
扩展)
XSLT扩展技术中,比较有代表性的是
EXSLT
(
Extensions to XSLT
,
XSLT
扩展)。
EXSLT.org是一个以扩展
XSLT
为目的而发展起来的组织,其提出的
“EXSLT”
得到了
Saxon
、
Xalan
等
XSLT
处理器的支持。
EXSLT定义了多个模块(
module
),如
Common
(普通模块,提供常用的
XSLT
扩展功能)、
Math
(数学运算)、
Sets
(节点集操作)、
Functions
(自定义函数或处理脚本)、
Dates and Times
(日期和时间)、
Strings
(字符串)、
Regular Expressions
(正则表达式)、
Dynamic
(
XPath
动态求值)、
Random
(随机序列)等。
EXSLT
引入了新的元素或函数,扩展了
XSLT 1.0
的功能,详细请参见其网站(
http://www.exslt.org
)上的介绍。
注意:EXSLT
的模块并不是必须实现的。某些生成支持
EXSLT
的处理器仅实现其中部分的功能。
2.
对saxon
和
xalan
的研究
Saxon实现扩展功能需要收费。
Xalan
是
apache
的一个项目。
这两种技术都能实现自定义函数的扩展,但是官方的帮助文档对开发人员来说基本上没有帮助。给出的demo
都是
jar
包,还要反编译才能看见
demo
的源码。看了一下例子后,算了,收费的啊,闪!
在研究xalan
的时候发现,原来是这么的容易,下面给出这里例子。
3.
解决问题
Dom4j使用的是
xalan xslt
处理器:
Transforme
实现
org.apache.xalan.transformer.TransformerIdentityImpl
。
3.1.
如何将java
类链接到
xslt
静待调用
在xalan
中实现扩展的时候,
java
类的方法都是静态方法。用
java.lang.Math
做测试。
1.
xml文件
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
datas
>
<
data
>
16
</
data
>
<
data
>
9
</
data
>
</
datas
>
|
对<data>
标签内的做平方根计算。这里平方根计算借助
java.lang.Math.sqrt()
方法实现。用
xalan
从
xslt
调用一个
java
类的静态方法只需三步:
l
将一个名称空间前缀(如 math
)映射为形如
xalan://fully.package.qualified.ClassName
(如 xalan://java.lang.Math
)的
Uniform Resource Identifier
(
URL
)。
2
在根元素 xsl:stylesheet
的
extension-element-prefixes
属性中列出此前缀。
3
使用 prefix
:
methodName() 这样的形式调用函数,例如
math:sqrt(.)
。
2.
xml文件 :声明
xalan xslt
文件。这里声明版本
xslt1.0
不是
xslt2.0
。
<
xsl:stylesheet
version
=
"1.0"
xmlns:xsl
=
"http://www.w3.org/1999/XSL/Transform"
xmlns:math
=
"xalan://java.lang.Math"
extension-element-prefixes
=
"math"
>
<
xsl:template
match
=
"/"
>
<
xsl:for-each
select
=
"datas"
>
<
xsl:apply-templates
select
=
"data"
/>
</
xsl:for-each
>
</
xsl:template
>
<
xsl:template
match
=
"data"
>
<
xsl:variable
name
=
"value"
select
=
"number(.)"
/>
<
xsl:value-of
select
=
"math:sqrt($value)"
/>
</
xsl:template
>
</
xsl:stylesheet
>
|
注意:
要调用其他类中的静态方法,可将完全限定名称映射到另外一个前缀。然后,在 extension-element-prefixes
属性中列出各前缀,以空格分隔。
这种技术绝非仅限于核心 Java
包中定义的方法。您可通过完全相同的方式调用您自己的类中的静态方法;这些方法可以实现一个
Java
静态方法能实现的一切功能。只要在运行
Xalan
时将类放在您所使用的类路径中即可。
测试用的
SimpleTransform
类:
public
class
SimpleTransform
{
public
static
void
main(String[] args)
throws
TransformerException, TransformerConfigurationException, FileNotFoundException, IOException{
TransformerFactory tFactory = TransformerFactory.
newInstance
();
Transformer transformer = tFactory.newTransformer(
new
StreamSource(
"2.xsl"
));
// Result result = new StreamResult(new FileOutputStream("result.xml"));//结果输出到result.xml文件
Result result =
new
StreamResult(System.
out
);
//结果输出到在控制台
transformer.transform(
new
StreamSource(
"1.xml"
),result );
System.
out
.println(
"************* The result is in result.xml *************"
);
}
}
|
如果你很关心这项技术,可以查看:
简单的 Xalan 扩展函数
。
- A_XSLT.rar (3.9 KB)
- 描述: 本文相关代码,解压为一个eclipse工程
- 下载次数: 54
分享到:
相关推荐
Xalan支持创建自定义函数,这些函数可以在XSLT样式表中被调用,实际上它们是用Java编写的。使用`<xsl:extension-element-prefix>`和`<xsl:call-template>`或`<xsl:function>`声明Java方法,并在XSLT中调用。 示例...
- 示例XSLT样式表,其中使用了自定义函数。 - 测试脚本或程序,用于运行和验证示例。 通过研究和学习这个示例,你可以深入了解如何在实际项目中集成和使用自定义XPath函数,提高XML处理的灵活性和效率。 总结一下...
5. **可扩展性**:支持用户自定义的函数和扩展,可以创建自己的模板和函数库,以满足特定需求。 **使用Xalan-J 2.7.2** 在实际应用中,开发者通常会通过以下步骤使用Xalan-J: 1. **添加依赖**:将`xalan.jar`...
此外,XSLT 2.0及以上版本还支持自定义函数。 在“XsltExample”中,我们可能看到以下场景: - **数据格式化**:例如,将XML中的数值格式化为货币值,或者将日期字符串转换为人类可读的格式。 - **结构转换**:XML...
- **编程语言**:使用如Java、C#等编程语言编写自定义扩展。 - **原生集成到XSLT处理器**:一些XSLT处理器如Saxon、Xalan等内置了对EXSLT的支持。 #### 4.2 实施挑战 实施扩展的主要挑战是**可移植性**。因为不同...
前者允许声明自定义的元素,这些元素在转换过程中被映射到Java类的方法,后者则支持自定义函数,这些函数同样可以在XSLT中调用。这样,我们就可以在XSLT模板中灵活地使用Java对象,进行复杂的逻辑处理或数据计算。 ...
除了标准的XSLT功能,开发者还可以通过自定义扩展元素和函数来扩展XSLT的能力。这使得XSLT能够适应更广泛的应用场景,如数据库访问、图形生成等。 ### 案例研究:Toot-O-Matic 书中的案例研究部分通过一个具体的...
xalan java源码扩大 概述 extensify 是一套 Java 库,旨在使包含自定义的单元测试 XSLT 转换成为可能。 诸如此类的平台利用了 XSLT 规范中的这一特性,并实现了超出标准 XSLT 甚至 . 虽然这些扩展提供了在 DataPower...
Xalan 是一个流行的 XSLT 处理器,支持 Java 和 C++ 平台。安装 Xalan 的步骤通常包括: - **下载 Xalan**: 访问官方网站获取最新版本的 Xalan。 - **配置环境**:根据所使用的平台进行相应的环境配置。 - **测试...
5. **扩展机制**:Xalan-Java提供了一套强大的扩展机制,允许开发者自定义函数库、模版和处理行为,以满足特定需求。 接下来,我们转向伯克利存储管理器(BeStMan)。这是一个专门为分布式系统设计的高性能、可扩展...
7. **Apache Crimson与Apache Xalan**:早期的JAXP版本与Apache Crimson(源自Sun Project X Parser)捆绑,但随着JAXP的发展,如JAXP 1.2,开始采用Apache Xalan作为XSLT处理器,而不再直接支持Apache Crimson。...
2. **全面覆盖**:支持对XSLT脚本中的各个部分进行独立测试,包括模板、模式匹配、变量和函数等。 3. **断言机制**:提供丰富的断言库,如比较XML结构、文本内容、节点计数等,确保测试结果的准确性。 4. **集成友好...
可以使用自定义加密绕过静态分析,部分函数不会触发动态扫描(运行时分析)等方法来绕过Windows Defender的防御机制。 3. 卡巴斯基进程保护: 可以通过蓝屏获得memory.dmp绕过卡巴斯基,然后通过蓝屏绕过卡巴斯基...
在实际应用中,我们可以使用XML解析器(如Java的DOM或SAX解析器)读取XML文档,然后结合XSLT处理器(如Saxon或Xalan)和XSL样式表进行转换,生成HTML页面供浏览器展示。例如,`test.xml`可能是包含结构化数据的XML...