我创建的xslt样式表之一有很多用法,例如
<xsl:template match="ProductType">
<xsl:value-of select="../../Title"/>
</xsl:template>
所以我的问题是,创建一个新的节点集会更有效率,包括所需的数据或者使用params传递吗?
这种情况的最佳做法是什么?
xml将采用以下形式
<product>
<title>the title</title>
<tags>
<producttype>the product type</producttype>
<tags>
</product>
实际模板匹配如下
<xsl:template match="ProductType" xml:space="default">
<xsl:param name="by" select="by"/>
<xsl:choose>
<xsl:when test="current()='Karaoke MP3+G'">
<div class="product-subhead">
<h3>Karaoke Song</h3>
<h3 class="middle">MP3+G</h3>
<h3>100% Legal Download</h3>
</div>
The track <xsl:value-of select="../../Title"/> is 100% legally covered by MCPS and PPL ensuring the artist <xsl:value-of select="../../Attribution"/> is paid royalties for every sale! Each karaoke track download from Mastermix Digital contains audio and graphics prompts. The song is provided in MP3+G format. Purchase is available through Paypal with all major credit cards.
</xsl:when>
<xsl:when test="current()='Track'">
<div class="product-subhead">
<h3>Original Version</h3>
<h3 class="middle">Available in 320kbps MP3 and WAV</h3>
<h3>100% Legal Download</h3>
</div>
The track <xsl:value-of select="../../Title"/> is 100% legally covered by MCPS and PPL ensuring the artist <xsl:value-of select="../../Attribution"/> is paid royalties for every sale! Each track download from Mastermix Digital is the original artist version and a guaranteed dancefloor filler! The audio is provided in high quality 320kbps mp3 format. Purchase is available through Paypal with all major credit cards.
</xsl:when>
<xsl:when test="current()='Extended Floorfillers'">
<div class="product-subhead">
<h3>Extended Version</h3>
<h3 class="middle">Available in 320kbps MP3 and WAV</h3>
<h3 class="phead3">100% Legal Download</h3>
</div>
Each extended floorfiller download from Mastermix Digital contains the original artist version mixed to be just that little bit longer! <xsl:value-of select="../../Title"/> is 100% legally covered by MCPS and PPL ensuring the artist <xsl:value-of select="../../Attribution"/> is paid royalties for every sale. The audio is provided in high quality 320kbps mp3 format. Purchase is available through Paypal with all major credit cards.
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
和xml的副本如下所示
<Tracks>
<Track AlbumArtURL="http://api.3.esh-partner.net/GetThumbnail.ashx?ID=07167B09-6365-4908-BFE6-811039D62D5E" IsBundle="true">
<ReportingCode>MG00089531</ReportingCode>
<Title Language="en-gb">Complete Number Ones Collection</Title>
<ExtendedTitle>Every UK No 1 in one download</ExtendedTitle>
<ExplicitContent>false</ExplicitContent>
<Attribution>Various Artists</Attribution>
<Duration Seconds="0">00:00:00</Duration>
<GRid>A1-0327D-MG00089531-J</GRid>
<CatalogNr>MFEG090</CatalogNr>
<OriginalReleaseFormat>CD</OriginalReleaseFormat>
<OriginalReleaseDate>2009-08-04</OriginalReleaseDate>
<ReleaseDate>2009-08-04</ReleaseDate>
<Description Language="en-gb">
<Long>One amazing collection! This download contains every single number 1 from the Official UK charts, since the charts began back in 1952 right up to the present day (not including the last 2 months)! That's more than 1,000 tracks, all in 320 KBPS (the highest quality, indistinguishable from quality you would get from a CD).
Save over £600 compared by buying every download individually!</Long>
</Description>
<Tags>
<ProductType>Track</ProductType>
</Tags>
<Attributes>
<Attribute Type="Text" Description="PriceCode">AA</Attribute>
<Attribute Type="LookupValue" Description="Category">MasterMix</Attribute>
</Attributes>
<Contributors />
<PriceBand>Mid/Front Premium</PriceBand>
<RecompilationRights>Yes</RecompilationRights>
</Track>
</Tracks>
答案 0 :(得分:0)
如果您在XPath中引用../..
的用法,我认为这并没有错。
但是如果你在product/title
模板的许多子模板中使用product
,解决它的一种方法是使用隧道参数:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="product">
<!-- Do some other stuff here maybe... -->
<xsl:apply-templates>
<xsl:with-param name="title" select="title" tunnel="yes"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="tags">
<!-- ... and some more stuff ... -->
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="ProductType">
<xsl:param name="title" tunnel="yes"/>
<xsl:value-of select="$title"/>
</xsl:template>
</xsl:stylesheet>
通过使用隧道参数,您可以在任何模板中选择它以生成任何子节点。但好的部分是你不必通过所有模板手动发送它不需要标题。
以下是有关隧道参数的更多信息:http://www.xml.com/lpt/a/1386
但是,这种技术需要XSLT 2.0,但您可以在XSLT 1.0中执行相同的操作,但需要注意的是,您需要将参数传递给您正在处理的每个模板。
答案 1 :(得分:0)
此样式表:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:h="header"
exclude-result-prefixes="h">
<h:header for="Karaoke MP3+G">
<h1>Karaoke Song</h1>
<h2>MP3+G</h2>
<h4>The track</h4>
<h5>Each karaoke track download from Mastermix Digital contains audio and graphics prompts. The song is provided in MP3+G format.</h5>
</h:header>
<h:header for="Track">
<h1>Original Version</h1>
<h2>Available in 320kbps MP3 and WAV</h2>
<h4>The track</h4>
<h5>Each track download from Mastermix Digital is the original artist version and a guaranteed dancefloor filler! The audio is provided in high quality 320kbps mp3 format.</h5>
</h:header>
<h:header for="Extended Floorfillers">
<h1>Extended Version</h1>
<h2>Available in 320kbps MP3 and WAV</h2>
<h3 class="phead3"/>
<h4>Each extended floorfiller download from Mastermix Digital contains the original artist version mixed to be just that little bit longer!</h4>
<h5>The audio is provided in high quality 320kbps mp3 format.</h5>
</h:header>
<xsl:template match="Track">
<xsl:variable name="vText" select="document('')/*/h:*[@for=current()/Tags/ProductType]"/>
<xsl:choose>
<xsl:when test="$vText">
<div class="product-subhead">
<h3>
<xsl:value-of select="$vText/h1"/>
</h3>
<h3 class="middle">
<xsl:value-of select="$vText/h2"/>
</h3>
<h3>
<xsl:copy-of select="$vText/h3/@*"/>
<xsl:text>100% Legal Download</xsl:text>
</h3>
</div>
<xsl:value-of select="$vText/h4"/>
<xsl:value-of select="Title"/> is 100% legally covered by MCPS and PPL ensuring the artist
<xsl:value-of select="Attribution"/> is paid royalties for every sale!
<xsl:value-of select="$vText/h5"/> Purchase is available through Paypal with all major credit cards.
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="Tags/ProductType"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
输出:
<div class="product-subhead">
<h3>Original Version</h3>
<h3 class="middle">Available in 320kbps MP3 and WAV</h3>
<h3>100% Legal Download</h3>
</div>
The trackComplete Number Ones Collection is 100% legally covered by MCPS and PPL ensuring the artist
Various Artists is paid royalties for every sale!
Each track download from Mastermix Digital is the original artist version and a guaranteed dancefloor filler! The audio is provided in high quality 320kbps mp3 format. Purchase is available through Paypal with all major credit cards.