2017-04-12 94 views
0

我似乎被卡住了。我正在嘗試生成新的ID,但它不會計算我希望它計數的方式。 我有以下XML文件:在XSLT中生成特定的ID

<componentcontent> 
     <explanation> 
      <include filename="ha-c41-ep1.xml"/> 
      <exercises> 
       <include filename="ha-c41-ot1.xml"/> 
       <include filename="ha-c41-ot2.xml"/> 
      </exercises> 
     </explanation> 
     <explanation> 
      <include filename="ha-c41-u1.xml"/> 
      <exercises> 
       <include filename="ha-c41-u11.xml"/> 
       <include filename="ha-c41-ex-4.xml"/> 
      </exercises> 
     </explanation> 
</componentcontent> 

我想說明文件(不是運動)有以下的ID:文件名= 「1-U1」,文件名= 「1-U2」 等

目前我使用以下XSLT:

<xsl:template match="componentcontent/explanation/include"> 
     <xsl:copy> 
      <xsl:attribute name="local:_file" select="local:new-paragraph-filename(., 'u')"/> 
      <xsl:apply-templates select="node() | @*" /> 
      <xsl:number count="explanation/include" level="any"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="c:file[exercise[@type eq 'explanation']]"> 
     <xsl:variable name="include" as="element(include)?" select="key('includes', @name)"/> 
     <xsl:if test="not($include)"> 
      <xsl:message terminate="yes">Geen include-element gevonden voor file met naam <xsl:value-of select="@name"/>.</xsl:message> 
     </xsl:if> 
     <xsl:copy> 
      <xsl:attribute name="name" select="local:new-paragraph-filename(key('includes', @name), 'u')"/> 
      <xsl:apply-templates select="node() | @* except @name"/> 
     </xsl:copy> 
    </xsl:template> 

這給了我下面的輸出:

<componentcontent> 
     <explanation> 
      <include filename="1-u1.xml">1</include> 
      <exercises> 
       <include filename="ha-c41-ot1.xml"/> 
       <include filename="ha-c41-ot2.xml"/> 
      </exercises> 
     </explanation> 
     <explanation> 
      <include filename="1-u1.xml">2</include> 
      <exercises> 
       <include filename="ha-c41-u11.xml"/> 
       <include filename="ha-c41-ex-4.xml"/> 
      </exercises> 
     </explanation> 
</componentcontent 

我的問題是,有人可以指向正確的方向,因爲數字不是我想要的方式嗎?

親切的問候

回答

0

如何:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="explanation/include/@filename"> 
    <xsl:attribute name="filename"> 
     <xsl:text>1-u</xsl:text> 
     <xsl:number count="explanation/include" level="any"/> 
     <xsl:text>.xml</xsl:text> 
    </xsl:attribute> 
</xsl:template> 

</xsl:stylesheet> 
+0

解決它了。感謝您的輸入! – ASB