XSLT与XML的数据转换

本文深入解读XSLT的工作原理,包括如何读取和处理XML文档,以及通过使用XSLT模板、值提取、循环、排序、条件测试、模板应用等关键元素,将XML数据转换为各种格式,如XHTML。通过具体示例,展示如何利用XSLT进行复杂的数据操作。
 XSLT 是Extensible Stylesheet Language Transformations 的缩写,它是用来将XML 文档转换到其它文档类型- 通常是XHTML,XSLT 使用两个输入文件
分别是包含实际数据的XML文档和包含要插入数据与XSLT 命令“架构”的XSL文档.
XSLT是工作大体如下:
1、XML 文档被读入内存当中,并存储为一棵结点树
2、<xsl:template match=“/”> 模板用来选择整个树的根结点
3、模板中的规则被用来进行结点的匹配,从而改变XML 树的结构
4、如果还有其它模板,那么它们必须显示地从主模板中调用
5、XML 树中没有匹配的部分保持原来的状态不变
6、模板应用完成后,树被作为一个新的文本文档输出出来
XSLT 主要语法实现如下:

1、XSLT 模板
<xsl:template> 元素包含了当指定的节点被匹配时所能应用的规则.
2、XSLT <xsl:value-of> 元素
<xsl:value-of> 元素可提取选定节点的值,并把值添加到转换的输出流中。
3、XSLT <xsl:for-each> 元素
<xsl:for-each> 元素允许您在 XSL 中进行循环。
4、XSLT <xsl:sort> 元素
<xsl:sort> 元素用于对输出进行排序。
5、XSLT <xsl:if> 元素
<xsl:if> 元素用于针对 XML 文件的内容放置一个条件测试。
6、XSLT <xsl:choose> 元素
<xsl:choose> 元素被用来与 <xsl:when> 和 <xsl:otherwise> 配合使用,来表达多重的条件检验。
7、XSLT <xsl:apply-templates> 元素
<xsl:apply-templates> 元素可把模板规则应用到当前节点或者当前元素的子节点。
<xsl:for-each> <xsl:value-of><xsl:sort> 示例:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
	<xsl:output method="xml" indent="yes"/>
	<xsl:template match="/">
		<table style="background-color:lightgreen">
			<xsl:for-each select="./Products/Category">
                           <!--<xsl:sort select="UnitPrice" order="descending"/>-->    
				<tr>
					<td style="border:solid 1px blank;">
						<xsl:value-of select="./SupplierID"/>
					</td>
					<td style="border:solid 1px blank;">
						<ul>
							<xsl:for-each select="./ProductName">
								<li>
									<xsl:value-of select="../ProductName"/>
									<xsl:value-of select="../UnitPrice"/>
								</li>
							</xsl:for-each>
						</ul>
					</td>
				</tr>
			</xsl:for-each>
		</table>
	</xsl:template>
</xsl:stylesheet>


 <xsl:if> 元素示例:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <table style="background-color:lightgreen">
          <xsl:for-each select="./Products/Category">
          <tr>
            <xsl:attribute name="style">
              <xsl:if test="UnitPrice > 50"><!--Cost >50-->
                background-color:red
              </xsl:if>
              <xsl:if test="UnitPrice < 50"><!--Cost <=50-->
                background-color:green
              </xsl:if>              
            </xsl:attribute>           
            <td style="border:solid 1px blank;">
             <xsl:apply-templates select="ProductName"/>
            </td>
            <td style="border:solid 1px blank;">
              <xsl:apply-templates select="UnitPrice"/>
            </td>
          </tr>
          </xsl:for-each>
        </table>
    </xsl:template>
</xsl:stylesheet>


<xsl:choose>元素示例:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <table style="background-color:lightgreen">
          <xsl:for-each select="./Products/Category">
          <tr>
            <xsl:attribute name="style">
              <xsl:choose>
                <xsl:when test="UnitPrice > 50">
                  <!--Cost >50-->
                  background-color:red
                </xsl:when>
                <xsl:when test="UnitPrice < 10">
                  <!--Cost <10-->
                  background-color:blue
                </xsl:when>
                 <xsl:otherwise>               
                  background-color:green
                </xsl:otherwise>
              </xsl:choose>                 
            </xsl:attribute>           
            <td style="border:solid 1px blank;">
             <xsl:apply-templates select="ProductName"/>
            </td>
            <td style="border:solid 1px blank;">
              <xsl:apply-templates select="UnitPrice"/>
            </td>
          </tr>
          </xsl:for-each>
        </table>
    </xsl:template>
</xsl:stylesheet>



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值