Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18670432
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类:

2008-05-27 22:03:59

本文节选于《Programming PHP》第二版(中译名《PHP程序设计》第二版,Haohappy等译,电子工业出版社出版)

11.6  使用XSLT转换XML

Transforming XML with XSLT   

XSLT(eXtensible Stylesheet Language Transformation,可扩展样式表语言转换),是一种将XML文档转换成不同的XML、HTML或其他格式的语言。例如,很多网站提供几种不同 格式来输出内容,如HTML、可打印的HTML和WML(Wireless Markup Language,无线标记语言),这些都是很常见的。同一信息多种视图的最简单的实现方法是把内容放在一个XML文档中,然后用XSLT来生成 HTML、可打印的HTML和WML。

PHP的XSLT扩展使用了libxslt库来提供XSLT支持。PHP5默认支持这个库,只要在编译PHP时加上选项--with-xsl[=DIR],就能使用该类库。

一个XSLT转换过程中有3种文档:原始的XML文档、包含转换规则的XSLT文档和结果文档。最后生成的文档不一定要是 XML格式——XSLT常用的用法是从XML创建HTML。用PHP来进行XSLT转换,需要创建一个XSLT处理器,给它要转换的内容,然后销毁该处理 器。

通过创建一个XSLTProcessor对象来创建一个处理器:

$xslt = new XSLTProcessor;

把XML和XSL文件解析成DOM对象:

$xml = new DOMDocument

$xml->load($xml_file);

$xsl = new DOMDocument;

$xsl->load($xsl_file);

给该对象添加XML转换规则:

$xslt->importStyleSheet($xsl);

用transformToDoc( )、transformToURI( )、或transformToXML( )方法来处理一个文件:

$result = $xslt->transformToXML($xml);

Document参数是一个表达XML文档的DOM对象。

示例11-11是我们要转换的XML文档。它的格式和你在网络上看到的许多新闻的格式很相似。

示例11-11:XML文档

 

    O'Reilly Publishes Programming PHP

   

   

    Rasmus and some others

 

 

    Transforming XML with PHP Simplified

   

   

    k.tatroe

 

示例11-12是我们用来将XML文档转换成HTML的XSL文档。每个xsl:template元素包含一个处理输入文档的规则。

示例11-12:News XSL transform

  method="html"

  indent="yes"

  encoding="utf-8"

/>

 

   

      Current Stories

   

   

     

   

 

 

   

   

      ()

     

      [ More ]

   

   


 

示例11-13是一段简短的代码,用XSL样式表将XML文档转换成HTML文档。我们创建了一个处理器,传递文档给它,然后打印出结果。

示例11-13:XSL转换

 $processor = new XSLTProcessor;

 $xsl = new DOMDocument;

 $xsl->load('rules.xsl');

 $processor ->importStyleSheet($xsl);

 $xml = new DOMDocument;

 $xml->load('feed.xml');

 $result = $processor ->transformToXML($xml);

 echo "

$result
";

?>

尽管没有特别讨论PHP,Doug Tidwell所著的《XSLT》(O'Reilly出版)提供了XSLT样式表的详细语法指南。

阅读(433) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~