也许有更好的方式来描述我的问题...
以下是我想要做的一个例子:
拿这个:
<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和inc_3c-copy存在于同一页面上的情况。
希望我不需要创建另一个XSL页面。
这必须是非编码证明。
答案 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>