【问题标题】:XSLT apply templates conditioningXSLT 应用模板条件
【发布时间】:2017-03-29 08:02:29
【问题描述】:

我在应用模板时遇到问题,考虑我的 xml 将是这样的, 在此输入代码

<card>
   <pre/>
<main>    
  <step1/>
  <step1/>
  <panels>
    <panel/>
    <panel/>
  </panels>
  <step1/>
<main> 
 </card>

在 main 中,所有 step1 都将从 1. 开始,并在进一步的 step 中递增。现在当面板出现时,它应该将每个面板作为一个 step,它将从 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。

【问题讨论】:

  • 您能否在这种情况下显示您期望的输出,以明确“编号”应该如何工作。谢谢!
  • 编号很好。它就像 对于面板,对于步骤
  • 我唯一关心的是如何按顺序调用模板,如 step ,然后 next step 和 panel 然后 step
  • 抱歉,您的问题完全不清楚。我们不知道您要达到什么目标。
  • okie 说得非常简单,我有一个模板 minfunc , 这将为 xml 中的所有 step1 应用 step1 模板,我只想申请前 3 个 step1,接下来它应该申请面板然后再到 step1

标签: xslt xslt-2.0 xslt-grouping


【解决方案1】:

这有点猜测,因为我并不完全清楚你想做什么,但我认为你可以做的是......

<xsl:apply-templates select="step1|panels[contains($wcType,'P')]"/>

| 符号是联合运算符,节点的联合将按文档顺序选择。因此,它将选择第一个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> 

【讨论】:

  • 在我给出的编号的第 1 步模板中, 在我给出的面板模板是这样的, ,现在顺序很好,它调用 1. step1 2. step1 1.panel 2.panel 3.step1 ,编号不正确现在请帮助面板将在面板父标签中,所以我使用了 来计算面板
  • 如果您需要编号方面的帮助,您应该真正编辑您的问题以显示带有编号的预期输出,因为在 cmets 中代码真的很难阅读。谢谢。
  • 确定蒂姆,我正在尝试一些编号逻辑,很快就会回来蒂姆
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多