我可以重复使用具有唯一XML内容的XSL模板吗?

时间:2011-06-03 12:20:35

标签: xml xslt

也许有更好的方式来描述我的问题...

以下是我想要做的一个例子:

拿这个:

<inc_3c>
    <Title>This is 3C</Title>
    <Subtitle>Lorem ipsum dolor consectetur adipiscing elit. Fusce mattis consequat malesuada.</Subtitle>
    <Description>Consectetur adipiscing elit. Fusce mattis consequat malesuada. Nullam vel justo a dui pellentesque euismod. Integer eu pulvinar dolor.</Description>
    <Class>priceWrapper</Class>
    <Price>$00.00</Price>
    <Url>Url</Url>
    <Image>apple-tv.png</Image>
</inc_3c>

并像这样复制:

<inc_3c-copy>
    <Title>This is 3C</Title>
    <Subtitle>Lorem ipsum dolor consectetur adipiscing elit. Fusce mattis consequat malesuada.</Subtitle>
    <Description>Consectetur adipiscing elit. Fusce mattis consequat malesuada. Nullam vel justo a dui pellentesque euismod. Integer eu pulvinar dolor.</Description>
    <Class>priceWrapper</Class>
    <Price>$00.00</Price>
    <Url>Url</Url>
    <Image>apple-tv.png</Image>
</inc_3c-copy>
  • inc_3c =将填充第1页上的内容
  • inc_3c-copy =将填充第2页上的内容

甚至可能是inc_3c和inc_3c-copy存在于同一页面上的情况。

希望我不需要创建另一个XSL页面。

这必须是非编码证明。

1 个答案:

答案 0 :(得分:3)

了解如何使用identity rule/template并覆盖它。仅这一点就是最基本和最强大的XSLT设计模式

在您的情况下,我们使用此设计模式以下列方式覆盖顶部元素:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="/inc_3c">
  <inc_3c-copy>
   <xsl:apply-templates/>
  </inc_3c-copy>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档时:

<inc_3c>
    <Title>This is 3C</Title>
    <Subtitle>Lorem ipsum dolor consectetur adipiscing elit. Fusce mattis consequat malesuada.</Subtitle>
    <Description>Consectetur adipiscing elit. Fusce mattis consequat malesuada. Nullam vel justo a dui pellentesque euismod. Integer eu pulvinar dolor.</Description>
    <Class>priceWrapper</Class>
    <Price>$00.00</Price>
    <Url>Url</Url>
    <Image>apple-tv.png</Image>
</inc_3c>

生成了需要的相关结果

<inc_3c-copy>
   <Title>This is 3C</Title>
   <Subtitle>Lorem ipsum dolor consectetur adipiscing elit. Fusce mattis consequat malesuada.</Subtitle>
   <Description>Consectetur adipiscing elit. Fusce mattis consequat malesuada. Nullam vel justo a dui pellentesque euismod. Integer eu pulvinar dolor.</Description>
   <Class>priceWrapper</Class>
   <Price>$00.00</Price>
   <Url>Url</Url>
   <Image>apple-tv.png</Image>
</inc_3c-copy>