xsl调用java方法传参

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

首先,看一个实际的示例— rultor.com —一个托管的DevOps助手,该助手可以自动执行发布,合并和部署操作。 Rultor在DynamoDB记录中与最终用户保持每次对话会话(也称为“对话”)。 每次谈话有多种情况需要处理。 这就是为什么使用记录的多列实际上不可行的原因。 相反,我们只将每个对话的几个参数保留在记录列中(例如ID和名称),并将所有其余参数放在一个XML列中。

这大约是我们的DynamoDB表的外观:

+----+---------------+--------------------------------------+
| id | name          | xml                                  |
+----+---------------+--------------------------------------+
| 12 | jcabi-xml#54  | <?xml version='1.0'?>                |
|    |               | <talk public="true">                 |
|    |               |   <request id="e5f4b3">...</request> |
|    |               | </talk>                              |
+----+---------------+--------------------------------------+
| 13 | jcabi-email#2 | <?xml version='1.0'?>                |
|    |               | <talk public="true">                 |
|    |               |   <daemon id="f787fe">...</daemon>   |
|    |               | </talk>                              |
+----+---------------+--------------------------------------+

用户将@rultor status到Github票证后,Rultor必须回答有关当前谈话的完整状态报告。 为了创建这样的文本答案(普通用户不会喜欢XML响应),我们必须从必要的DynamoDB记录中获取该xml列,并将其转换为纯英文文本。

这是我们在jcabi-xml及其类XSLDocument的帮助下进行的 XSLDocument

final String xml = // comes from DynamoDB
final XSL xsl = new XSLDocument(this.getClass().getResourceAsStream("status.xsl")
);
final String text = xsl.applyTo(xml);

而已。 现在,让我们看看status.xsl文件中的内容(这只是它的框架;完整版本在这里 ):

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"><xsl:output method="text"/><xsl:template match="/talk"><xsl:text>Hi, here is your status report:</xsl:text>...</xsl:template><xsl:template match="node()|@*"><xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy></xsl:template>
</xsl:stylesheet>

优良作法是每个应用程序运行仅创建一次XSL文档。 我们有一个静态实用程序方法XSLDocument.make()

final class Foo {private static final XSL STYLESHEET = XSLDocument.make(Foo.class.getResourceAsStream("stylesheet.xsl"));public XML style(final XML xml) {return Foo.STYLESHEET.transform(xml);}
}

请注意我们正在使用XSLT 2.0的事实。 XSLT的内置Java实现不支持2.0版,为了使其运行,我们使用了以下两个Maven Saxon依赖项:

<dependency><groupId>net.sourceforge.saxon</groupId><artifactId>saxon</artifactId><version>9.1.0.8</version><scope>runtime</scope>
</dependency>
<dependency><groupId>net.sourceforge.saxon</groupId><artifactId>saxon</artifactId><version>9.1.0.8</version><classifier>xpath</classifier><scope>runtime</scope>
</dependency>

开始使用jcabi-xml进行XSL转换所需要做的就是将此依赖项添加到pom.xml

<dependency><groupId>com.jcabi</groupId><artifactId>jcabi-xml</artifactId>
</dependency>

如果您有任何问题或建议,请随时向Github 问题跟踪器提交问题 。

翻译自: https://www.javacodegeeks.com/2015/02/xsl-transformation-java-easy-way.html

xsl调用java方法传参

xsl调用java方法传参_Java中的XSL转换:一种简单的方法相关推荐

  1. java 调用kettle job 传参_java调用kettle向job(任务)和transformation(转换)传递参数实例...

    虽然网上文章有说java可以传递参数给kettle,不过只找到了传递参数给转换的文章,没有讲参数传递给job,kettle中如何使用java传递的参数.今天就以上问题,一并共享. /** * 本测试类 ...

  2. java 取对象的类_Java中通过Class类获取Class对象的方法详解

    前言 本文主要给大家介绍的是关于Java通过Class类获取Class对象的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 阅读API的Class类得知,Class 没有公共 ...

  3. java构造函数传参_java 构造函数 , 参数传递 , lamda表达式

    1.  java 子类中必须显式或者隐式的调用父类的构造方法,原因是双亲委派机制.java 在创建一个对象是,会在构造方法中依次向上调用父类的构造方法. 为了找到父类的构造方法,所以子类应显式或者隐式 ...

  4. java list初始化数据_Java中初始化List的5种方法 /List的2种去重方式

    前言 List是java重要的数据结构之一,我们经常接触到的有ArrayList.Vector和LinkedList三种,他们都继承来自java.util.Collection接口,类图如下: 1.构 ...

  5. java按钮添加事件_java中添加按钮并添加响应事件的方法(推荐)

    关于java容器,面板等自行百度学一下吧 private button loginbtn = new button("登陆"); final static jframe buyer ...

  6. java获取键盘整数_Java中从键盘输入多个整数的方法

    例题:求数列的和 分别输入两个整数n,m,中间以空格隔断,n 为数列第一项,后面各项均为前一项的开根号,求前m项的和. 第一种从键盘输入并读取的方式:sc.hasNextInt() 函数和sc.nex ...

  7. java hashmap遍历顺序_Java中HashMap遍历的两种方式

    第一种: Map map =  HashMap(); Iterator iter = map.entrySet().iterator(); (iter.hasNext()) { Map.Entry e ...

  8. java for循环 写法_java中for循环的6种写法

    packageForLoop;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;/*** java中for ...

  9. java类初始数组_java中数组初始化的三种方式是什么

    java中数组初始化的三种方式是:1.静态初始化,如[int a[] = {2, 0, 1, 9, 2020}]:2.动态初始化,如[int[] c = new int[4]]:3.默认初始化,如[i ...

最新文章

  1. bzoj 3572 [Hnoi2014]世界树——虚树
  2. android php mysql json 查询_使用json从PHP-MySql服务器到Android获取图像
  3. python处理word或者pdf文件_利用python程序生成word和PDF文档的方法
  4. CVPR 2018 paper list(论文列表)
  5. 2021-2025年中国一次性生物处理系统行业市场供需与战略研究报告
  6. serviceFabric oracle,Oracle ASM和多路径软件的兼容性【转】
  7. kernel编译速度提高
  8. 六西格玛绿带考试模拟试卷--多选题|优思学院
  9. IT人的第一份简历(Word版 、Markdown版、PDF版,静动态网页版)
  10. Effective+Java+中文版
  11. C语言递归函数实现十位数转换进制并打印出来(超详细)
  12. django 开发(一) mezzanine源码+ubuntu实现CMS Demo
  13. vue引入echarts-liquidfill水滴图并批量动态加载
  14. Linux命令--tail
  15. 计算机硬件知识比赛策划,计算机硬件知识讲座活动策划案.doc
  16. 关闭hadoop安全模式
  17. CUDA out of memory(然鹅明明还有空间)
  18. 柬埔寨月薪4万敲代码?真相是我差点丢了性命!
  19. 蜂鸣器(HC6800-EM3 V2.2开发板)
  20. DEEPIN 安装软件的方法

热门文章

  1. P5895-[IOI2013]dreaming梦想【树的直径,结论】
  2. jzoj3054-祖孙询问【LCA】
  3. 2018/7/8-纪中某C组题【jzoj1619,jzoj1620,jzoj1621,jzoj1622】
  4. Codeforces Round #671 (Div. 2)
  5. 图书管理员【2017年普及组第二题】
  6. Hadoop入门(十六)Mapreduce的单表关联程序
  7. mybatis更新Blob类型字段要用updateByPrimaryKeyWithBLOBs
  8. 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明
  9. Java命令学习系列(四)——jstat
  10. 如何实现省市关联的下拉列表