php&java(三)


Posted in PHP onOctober 09, 2006

例子二:通过Xalan 1.2,使用XSLT转换XML

做为第二个例子,我们使用了Xalan-java的XSLT引擎,这个引擎来自于APACHE的XML项目,使用这个程序,我们能够使用XSL转换XML源文件。这将极大的方便我们处理文档和进行内容管理。

开始之前,我们需要将xerces.jar 和 xalan.jar文件放入java.class.path目录下(这两个文件包含在Xalan-Java 1.2 中,可以从xml.apache.org处下载)。
PHP程序如下:
函数xslt_transform()以XML和XSL文件为参数,形式可为文件名(如:foo.xml)或URL(如:http://localhost/foo.xml)。

<?php

function xslt_transform($xml,$xsl) {

  // Create a XSLTProcessorFactory object. XSLTProcessorfactory is a Java
  // class which manufactures the processor for performing transformations.
  $XSLTProcessorFactory = new java("org.apache.xalan.xslt.XSLTProcessorFactory");

  // Use the XSLTProcessorFactory method getProcessor() to create a
  // new XSLTProcessor object.
  $XSLTProcessor = $XSLTProcessorFactory->getProcessor();

  // Use XSLTInputSource objects to provide input to the XSLTProcessor
  // process() method for transformation. Create objects for both the
  // xml source as well as the XSL input source. Parameter of
  // XSLTInputSource is (in this case) a 'system identifier' (URI) which
  // can be an URL or filename. If the system identifier is an URL, it
  // must be fully resolved.
  $xmlID = new java("org.apache.xalan.xslt.XSLTInputSource", $xml);
  $stylesheetID = new java("org.apache.xalan.xslt.XSLTInputSource", $xsl);

  // Create a stringWriter object for the output.
  $stringWriter = new java("java.io.StringWriter");

  // Create a ResultTarget object for the output with the XSLTResultTarget
  // class. Parameter of XSLTResultTarget is (in this case) a 'character
  // stream', which is the stringWriter object.  
  $resultTarget = new java("org.apache.xalan.xslt.XSLTResultTarget", $stringWriter);

  // Process input with the XSLTProcessors' method process(). This
  // method uses the XSL stylesheet to transform the XML input, placing
  // the result in the result target.
  $XSLTProcessor->process($xmlID,$stylesheetID,$resultTarget);

  // Use the stringWriters' method toString() to
  // return the buffer's current value as a string to get the
  // transformed result.
  $result = $stringWriter->toString();
  $stringWriter->close();
  return($result);
}

?>

函数定义好后,我们就可以调用它了,在下面的例程中,变量$xml指向一个URL字符串,$xsl也是如此。这个例子将显示5个最新的phpbuilder.com文章标题。

<?php

$xml = "http://www.phpbuilder.com/rss_feed.php?type=articles&limit=5";
$xsl = "http://www.soeterbroek.com/code/xml/rss_html.xsl";
$out = xslt_transform($xml,$xsl);
echo $out;

?>

如果你在本地机上运行程序,必须确保你的函数参数指向正确的文件名。

<?php

$xml  = "/web/htdocs/xml_java/rss_feed.xml";
$xsl  = "/web/htdocs/xml_java/rss_html.xsl";
$out = xslt_transform($xml,$xsl);
echo $out;

?>

虽然这种效果我们可以通过其它方法实现,或许那些方法更好,但这个例子能让你对PHP调用JAVA类有一个更好的了解。

教程结束了,希望你能够从这篇教程中学到点东西,以下是一些你用得到的链接:
http://www.php4win.de ~ A great Win32 distribution of PHP
http://www.javasoft.com ~ Sun's Java release
http://www.jars.com ~ Start searching for handy Java classes
http://www.gamelan.com ~ More Java classes
http://www.technetcast.com/tnc_play_stream.html?stream_id=400 ~ Sam Ruby about PHP and Java integration at Open Source Convention 2000 (audio)
http://xml.apache.org ~ Apache XML Project
http://www.phpbuilder.com/columns/justin20001025.php3 ~ Transforming XML with XSL using Sablotron

PHP 相关文章推荐
一个简单php扩展介绍与开发教程
Aug 19 PHP
PHP连接MongoDB示例代码
Sep 06 PHP
php引用传值实例详解学习
Nov 06 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
Jun 19 PHP
PHP中使用Imagick操作PSD文件实例
Jan 26 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
PHP编写文件多服务器同步程序
Jul 02 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
Yii2.0建立公共方法简单示例
Jan 29 PHP
PHP rmdir()函数的用法总结
Jul 02 PHP
php解决安全问题的方法实例
Sep 19 PHP
一个用于mysql的数据库抽象层函数库
Oct 09 #PHP
教你如何把一篇文章按要求分段
Oct 09 #PHP
全文搜索和替换
Oct 09 #PHP
转换中文日期的PHP程序
Oct 09 #PHP
PHP网上调查系统
Oct 09 #PHP
PHP的ASP防火墙
Oct 09 #PHP
一个高ai的分页函数和一个url函数
Oct 09 #PHP
You might like
php xml常用函数的集合(比较详细)
2013/06/06 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
js实现数组转换成json
2015/06/26 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
VueJS全面解析
2016/11/10 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
利用python实现逐步回归
2020/02/24 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
什么是Python包的循环导入
2020/09/08 Python
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
人民教师求职自荐信
2014/03/12 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
早读课迟到检讨书
2014/09/25 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
Feign调用传输文件异常的解决
2021/06/24 Java/Android
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS
JavaScript实例 ODO List分析
2022/01/22 Javascript
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL