nummerierung
pices
- xsl
0 ThomasM
hallo,
wie kann ich erreichen , dass obwohl eine xsl:for-each schleifen , die nummerierung einfach weiter geht und nicht von vorne wieder anfängt.
im moment habe ich als Ausgangdatei so was:~~~xml
<mode id=1>
<unitProcedure id=1>
.....
</unitProcedure>
<unitProcedure id=2>
.....
</unitProcedure>
<unitProcedure id=3>
.....
</unitProcedure>
</mode>
<mode id=2>
<unitProcedure id=1>
.....
</unitProcedure>
<unitProcedure id=2>
.....
</unitProcedure>
<unitProcedure id=3>
.....
</unitProcedure>
</mode>
und hätte gern:
~~~xml
<mode id="1">
<unitProcedure id="1">
.....
</unitProcedure>
<unitProcedure id="2">
.....
</unitProcedure>
<unitProcedure id=3"">
.....
</unitProcedure>
</mode>
<mode id="2">
<unitProcedure id="4">
.....
</unitProcedure>
<unitProcedure id="5">
.....
</unitProcedure>
<unitProcedure id="6">
.....
</unitProcedure>
</mode>
so sieht meine xsl datei aus ~~~xml
<xsl:template match="mode" >
<xsl:if test="isComposedOf/Action)@resource!='NULL'">
<mode >
<xsl:attribute name="id"><xsl:number count="mode[Action/@resource!='NULL']"/></xsl:attribute>
<
<xsl:apply-templates/>
</mode></xsl:if>
<xsl:template match="isComposedOf">
<xsl:variable name="number" ><xsl:number count="wpml:isComposedOf"/> </xsl:variable>
<xsl:for-each select="Action">
<unitProcedure>
<xsl:attribute name="id" select="$number"/>
select="isRefinedBy/resource" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
<label>
<xsl:value-of select="label" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"/>
</label>
</unitProcedure>
</xsl:for-each>
</xsl:template>
wie soll ich umgehen?
gruß
Hallo pices,
wie kann ich erreichen , dass obwohl eine xsl:for-each schleifen , die nummerierung einfach weiter geht und nicht von vorne wieder anfängt.
Ausgehend vom Quell- und Zielformat halte ich diesen Ansatz für geeigneter:
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@id[parent::unitProcedure]">
<xsl:attribute name="id">
<xsl:value-of select="count(preceding::unitProcedure) + 1"/>
</xsl:attribute>
</xsl:template>
Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<mode id="1">
<unitProcedure id="1">.....</unitProcedure>
<unitProcedure id="2">.....</unitProcedure>
<unitProcedure id="3">.....</unitProcedure>
</mode>
<mode id="2">
<unitProcedure id="4">.....</unitProcedure>
<unitProcedure id="5">.....</unitProcedure>
<unitProcedure id="6">.....</unitProcedure>
</mode>
</root>
Falls die id-Attributwerte tatsächlich dem ID-Typ entsprechen sollen, dann den Zahlenwerten noch (einen) Buchstaben voranstellen.
Grüße,
Thomas