如何更改foreach指令中的属性(xslt)

时间:2015-12-31 11:25:39

标签: xml xslt

我使用Indesign并使用xslt导入xml文件 我的xml文件是这样的:

...
<_04_Questions>
    <_04_QuestionsTitre>Ceci est le titre 1</_04_QuestionsTitre>
    <_04_QuestionsTexte>Ceci est le texte 2</_04_QuestionsTexte>
    <_04_BlocAncreA1 href="file:/images/myimage1.png"></_04_BlocAncreA1>
</_04_Questions>
<_04_Questions>
    <_04_QuestionsTitre>Ceci est le titre 1</_04_QuestionsTitre>
    <_04_QuestionsTexte>Ceci est le texte 2</_04_QuestionsTexte>
    <_04_BlocAncreA1 href="file:images/myimage2.png"></_04_BlocAncreA1>
</_04_Questions>
...

我想在每个&lt; _04_Questions&gt;之后添加一个新的图像,例如&#34; imagesupp01&#34;首先,&#34; imagesupp02&#34;对于第二个...

我的xslt的一部分是这样的:

<xsl:for-each select="Randoland/_04_BlocTexte/_04_Questions">
...
<xsl:element name="_04_BlocAncreA1">
    <xsl:attribute name="href">
    <xsl:value-of select="_04_BlocAncreA1/@href"/>
    </xsl:attribute>
</xsl:element>
...
????
</xsl:for-each>

我可以添加什么?添加新图像,每个步骤后都不同? 谢谢

1 个答案:

答案 0 :(得分:1)

你可能根本不需要xsl:for-each,你可以做到

<xsl:template match="_04_BlocAncreA1">
  <xsl:copy-of select="."/>
  <element>
    <xsl:text>imagesupp</xsl:text>
    <xsl:number count="_04_questions" format="001"/>
  </element>
</xsl:template>

不确定你想要调用的元素,我在这里只使用了element,但是它应该展示这个概念。

这假设您希望新元素紧跟在_04_BlocAncreA1元素之后。它在您的代码示例中是相同的,但如果您真正需要的是新元素在_04_Questions元素的末尾,那么您可以使用它:

<xsl:template match="_04_Questions">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
    <element>
      <xsl:text>imagesupp</xsl:text>
      <xsl:number count="_04_Questions" format="001"/>
    </element>
  </xsl:copy>
</xsl:template>