XSLT 应用模板调节
XSLT apply templates conditioning
我在应用模板时遇到问题,考虑到我的 xml 会像这样,
在此处输入代码
<card>
<pre/>
<main>
<step1/>
<step1/>
<panels>
<panel/>
<panel/>
</panels>
<step1/>
<main>
</card>
在 main 中,所有的 step1 都将以 1. 开始,并在面板出现时进一步递增 step.Now,它应该将每个面板作为一个步骤,它将以 3. , 4. next 开始step1 将是 5.
问题是,如果我在 mainfunc 中为 step1 应用模板,它会应用所有 step1。所以panel之后的step1也会排在第一位。我想为第 1 步到第 3 步应用模板。然后应用面板,然后应用最后的 step1。step1 计数并不总是相同,它们不同。
目前我有这样的东西,
<xsl:template match="mainfunc">
<xsl:apply-templates select="step1"/>
<xsl:if test="contains($wcType,'P')">
<xsl:apply-templates select="panels"/>
</xsl:if>
.....
如何修改以按顺序应用模板,并将面板编号为 3。
这有点猜测,因为我不完全清楚你想做什么,但我认为你可以做的是这个...
<xsl:apply-templates select="step1|panels[contains($wcType,'P')]"/>
|
符号是并集运算符,节点的并集将select按文档顺序排列。所以,它将 select 第一个 step1
,然后是 panels
,然后是下一个 step1
。
例如,这个 XSLT...
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:variable name="wcType" select="'Pie'" />
<xsl:template match="main">
<xsl:apply-templates select="step1|panels[contains($wcType,'P')]"/>
</xsl:template>
<xsl:template match="step1|panel">
<xsl:copy>
<xsl:number count="step1|panel" level="any" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于此 XML...
<card>
<main>
<step1/>
<step1/>
<panels>
<panel/>
<panel/>
</panels>
<step1/>
</main>
</card>
下面是输出
<step1>1</step1>
<step1>2</step1>
<panel>3</panel>
<panel>4</panel>
<step1>5</step1>
我在应用模板时遇到问题,考虑到我的 xml 会像这样, 在此处输入代码
<card>
<pre/>
<main>
<step1/>
<step1/>
<panels>
<panel/>
<panel/>
</panels>
<step1/>
<main>
</card>
在 main 中,所有的 step1 都将以 1. 开始,并在面板出现时进一步递增 step.Now,它应该将每个面板作为一个步骤,它将以 3. , 4. next 开始step1 将是 5.
问题是,如果我在 mainfunc 中为 step1 应用模板,它会应用所有 step1。所以panel之后的step1也会排在第一位。我想为第 1 步到第 3 步应用模板。然后应用面板,然后应用最后的 step1。step1 计数并不总是相同,它们不同。
目前我有这样的东西,
<xsl:template match="mainfunc">
<xsl:apply-templates select="step1"/>
<xsl:if test="contains($wcType,'P')">
<xsl:apply-templates select="panels"/>
</xsl:if>
.....
如何修改以按顺序应用模板,并将面板编号为 3。
这有点猜测,因为我不完全清楚你想做什么,但我认为你可以做的是这个...
<xsl:apply-templates select="step1|panels[contains($wcType,'P')]"/>
|
符号是并集运算符,节点的并集将select按文档顺序排列。所以,它将 select 第一个 step1
,然后是 panels
,然后是下一个 step1
。
例如,这个 XSLT...
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:variable name="wcType" select="'Pie'" />
<xsl:template match="main">
<xsl:apply-templates select="step1|panels[contains($wcType,'P')]"/>
</xsl:template>
<xsl:template match="step1|panel">
<xsl:copy>
<xsl:number count="step1|panel" level="any" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于此 XML...
<card>
<main>
<step1/>
<step1/>
<panels>
<panel/>
<panel/>
</panels>
<step1/>
</main>
</card>
下面是输出
<step1>1</step1>
<step1>2</step1>
<panel>3</panel>
<panel>4</panel>
<step1>5</step1>