首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

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文档

<?xml version="1.0" ?>

<news xmlns:news="http://slashdot.org/backslash.dtd">

  <story>

    <title>O'Reilly Publishes Programming PHP</title>

    <url>http://example.org/article.php?id=20020430/458566</url>

    <time>2002-04-30 09:04:23</time>

    <author>Rasmus and some others</author>

  </story>

  <story>

    <title>Transforming XML with PHP Simplified</title>

    <url>http://example.org/article.php?id=20020430/458566</url>

    <time>2002-04-30 09:04:23</time>

    <author>k.tatroe</author>

  </story>

</news>

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

示例11-12:News XSL transform

<?xml version="1.0" encoding="utf-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output

  method="html"

  indent="yes"

  encoding="utf-8"

/>

<xsl:template match="/news">

  <html>

    <head>

      <title>Current Stories</title>

    </head>

    <body bgcolor="white" >

      <xsl:call-template name="stories"/>

    </body>

  </html>

</xsl:template>

<xsl:template name="stories">

  <xsl:for-each select="story">

    <h1><xsl:value-of select="title" /></h1>

    <p>

      <xsl:value-of select="author"/> (<xsl:value-of select="time"/>)<br/>

      <xsl:value-of select="teaser"/>

      [ <a href="{url}">More</a> ]

    </p>

    <hr />

  </xsl:for-each>

</xsl:template>

</xsl:stylesheet>

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

示例11-13:XSL转换

<?php

 $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 "<pre>$result</pre>";

?>

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

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论