我在应用模板时遇到问题,请考虑我的xml会是这样的, 在这里输入代码
<card>
<pre/>
<main>
<step1/>
<step1/>
<panels>
<panel/>
<panel/>
</panels>
<step1/>
<main>
</card>
在主要内部,所有step1将以1开始,并在进一步的步骤中递增。现在,当面板到来时,它应该将每个面板作为一个步骤,它将以3.,4开始.4。下一步将是是5。
问题是,如果我在mainfunc中应用step1的模板,那么它将申请所有step1。所以面板之后的step1也会排在第一位。我想将temaplates用于step1到3rd step1。然后应用面板,然后应用最后一步。步骤1计数并不总是相同,它们不同。
目前我有类似的东西,
<xsl:template match="mainfunc">
<xsl:apply-templates select="step1"/>
<xsl:if test="contains($wcType,'P')">
<xsl:apply-templates select="panels"/>
</xsl:if>
.....
如何修改以按顺序应用模板,同时将面板编号为3.
答案 0 :(得分:0)
这是一个猜测,因为我不完全清楚你想做什么,但我认为你能做的就是这个...
<xsl:apply-templates select="step1|panels[contains($wcType,'P')]"/>
|
符号是union运算符,节点的并集将按文档顺序选择。因此,它会选择第一个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>