martin.mistery: XSL Problem

Beitrag lesen

Hallo Thomas,

ich hab hier folgende XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl:fo" href="Artikel.xsl"?>
<report>
 <dataarea_20 Name="Test">
  <records>
   <record No="1">
    <data>
     <T_MASTER_STR.POS_NO>10</T_MASTER_STR.POS_NO>
     <T_MASTER_DAT.PART_ID><![CDATA[10000]]></T_MASTER_DAT.PART_ID>
     <T_MASTER_DAT.PART_VERSION><![CDATA[A]]></T_MASTER_DAT.PART_VERSION>
     <T_MASTER_DAT.PART_NAME_GER><![CDATA[Gabel]]></T_MASTER_DAT.PART_NAME_GER>
     <T_MASTER_DAT.LEV_IND>10840</T_MASTER_DAT.LEV_IND>
     <T_MASTER_DAT.CUR_FLAG>n</T_MASTER_DAT.CUR_FLAG>
    </data>
   </record>
   <record No="2">
    <data>
     <T_MASTER_STR.POS_NO>10</T_MASTER_STR.POS_NO>
     <T_MASTER_DAT.PART_ID><![CDATA[10000]]></T_MASTER_DAT.PART_ID>
     <T_MASTER_DAT.PART_VERSION><![CDATA[B]]></T_MASTER_DAT.PART_VERSION>
     <T_MASTER_DAT.PART_NAME_GER><![CDATA[Gabel]]></T_MASTER_DAT.PART_NAME_GER>
     <T_MASTER_DAT.LEV_IND>10110</T_MASTER_DAT.LEV_IND>
     <T_MASTER_DAT.CUR_FLAG>y</T_MASTER_DAT.CUR_FLAG>
    </data>
   </record>
   <record No="3">
    <data>
     <T_MASTER_STR.POS_NO>20</T_MASTER_STR.POS_NO>
     <T_MASTER_DAT.PART_ID><![CDATA[20000]]></T_MASTER_DAT.PART_ID>
     <T_MASTER_DAT.PART_VERSION><![CDATA[B]]></T_MASTER_DAT.PART_VERSION>
     <T_MASTER_DAT.PART_NAME_GER><![CDATA[Löffel]]></T_MASTER_DAT.PART_NAME_GER>
     <T_MASTER_DAT.LEV_IND>10130</T_MASTER_DAT.LEV_IND>
     <T_MASTER_DAT.CUR_FLAG>y</T_MASTER_DAT.CUR_FLAG>
    </data>
   </record>
   <record No="4">
    <data>
     <T_MASTER_STR.POS_NO>20</T_MASTER_STR.POS_NO>
     <T_MASTER_DAT.PART_ID><![CDATA[20000]]></T_MASTER_DAT.PART_ID>
     <T_MASTER_DAT.PART_VERSION><![CDATA[A]]></T_MASTER_DAT.PART_VERSION>
     <T_MASTER_DAT.PART_NAME_GER><![CDATA[Löffel]]></T_MASTER_DAT.PART_NAME_GER>
     <T_MASTER_DAT.LEV_IND>10740</T_MASTER_DAT.LEV_IND>
     <T_MASTER_DAT.CUR_FLAG>n</T_MASTER_DAT.CUR_FLAG>
    </data>
   </record>
   <record No="5">
    <data>
     <T_MASTER_STR.POS_NO>30</T_MASTER_STR.POS_NO>
     <T_MASTER_DAT.PART_ID><![CDATA[30000]]></T_MASTER_DAT.PART_ID>
     <T_MASTER_DAT.PART_NAME_GER><![CDATA[Löffel]]></T_MASTER_DAT.PART_NAME_GER>
     <T_MASTER_DAT.LEV_IND>10540</T_MASTER_DAT.LEV_IND>
     <T_MASTER_DAT.CUR_FLAG>n</T_MASTER_DAT.CUR_FLAG>
    </data>
   </record>
   <record No="6">
    <data>
     <T_MASTER_STR.POS_NO>30</T_MASTER_STR.POS_NO>
     <T_MASTER_DAT.PART_ID><![CDATA[30000]]></T_MASTER_DAT.PART_ID>
     <T_MASTER_DAT.PART_VERSION><![CDATA[A]]></T_MASTER_DAT.PART_VERSION>
     <T_MASTER_DAT.PART_NAME_GER><![CDATA[Ball]]></T_MASTER_DAT.PART_NAME_GER>
     <T_MASTER_DAT.LEV_IND>10110</T_MASTER_DAT.LEV_IND>
     <T_MASTER_DAT.CUR_FLAG>y</T_MASTER_DAT.CUR_FLAG>
    </data>
   </record>
   <record No="7">
    <data>
     <T_MASTER_STR.POS_NO>40</T_MASTER_STR.POS_NO>
     <T_MASTER_DAT.PART_ID><![CDATA[40000]]></T_MASTER_DAT.PART_ID>
     <T_MASTER_DAT.PART_VERSION><![CDATA[A]]></T_MASTER_DAT.PART_VERSION>
     <T_MASTER_DAT.PART_NAME_GER><![CDATA[Kappe]]></T_MASTER_DAT.PART_NAME_GER>
     <T_MASTER_DAT.LEV_IND>10350</T_MASTER_DAT.LEV_IND>
     <T_MASTER_DAT.CUR_FLAG>n</T_MASTER_DAT.CUR_FLAG>
    </data>
   </record>
   <record No="8">
    <data>
     <T_MASTER_STR.POS_NO>40</T_MASTER_STR.POS_NO>
     <T_MASTER_DAT.PART_ID><![CDATA[40000]]></T_MASTER_DAT.PART_ID>
     <T_MASTER_DAT.PART_VERSION><![CDATA[B]]></T_MASTER_DAT.PART_VERSION>
     <T_MASTER_DAT.PART_NAME_GER><![CDATA[Kappe]]></T_MASTER_DAT.PART_NAME_GER>
     <T_MASTER_DAT.LEV_IND>10330</T_MASTER_DAT.LEV_IND>
     <T_MASTER_DAT.CUR_FLAG>y</T_MASTER_DAT.CUR_FLAG>
    </data>
   </record>
   <record No="9">
    <data>
     <T_MASTER_STR.POS_NO>50</T_MASTER_STR.POS_NO>
     <T_MASTER_DAT.PART_ID><![CDATA[50000]]></T_MASTER_DAT.PART_ID>
     <T_MASTER_DAT.PART_VERSION><![CDATA[A]]></T_MASTER_DAT.PART_VERSION>
     <T_MASTER_DAT.PART_NAME_GER><![CDATA[Jacke]]></T_MASTER_DAT.PART_NAME_GER>
     <T_MASTER_DAT.LEV_IND>10540</T_MASTER_DAT.LEV_IND>
     <T_MASTER_DAT.CUR_FLAG>n</T_MASTER_DAT.CUR_FLAG>
    </data>
   </record>
   <record No="10">
    <data>
     <T_MASTER_STR.POS_NO>50</T_MASTER_STR.POS_NO>
     <T_MASTER_DAT.PART_ID><![CDATA[50000]]></T_MASTER_DAT.PART_ID>
     <T_MASTER_DAT.PART_VERSION><![CDATA[B]]></T_MASTER_DAT.PART_VERSION>
     <T_MASTER_DAT.PART_NAME_GER><![CDATA[Jacke]]></T_MASTER_DAT.PART_NAME_GER>
     <T_MASTER_DAT.LEV_IND>10510</T_MASTER_DAT.LEV_IND>
     <T_MASTER_DAT.CUR_FLAG>y</T_MASTER_DAT.CUR_FLAG>
    </data>
   </record>
  </records>
 </dataarea_20>
</report>

Das XSL hierfür

<xsl:for-each select="dataarea_20/records/record/[dataarea_20/records/record/data/T_MASTER_DAT.CUR_FLAG = 'y']">
<xsl:variable name="FK"><xsl:value-of select="data/T_MASTER_DAT.LEV_IND"/></xsl:variable>
<xsl:if test="$FK > '10330''">
<xsl:choose>
<xsl:when test="position() mod 2">
<fo:table-row>
<fo:table-cell><fo:block padding-top="0.75mm"><xsl:value-of select="data/T_MASTER_STR.POS_NO"/></fo:block></fo:table-cell>
<fo:table-cell><fo:block padding-top="0.75mm"><xsl:value-of select="data/T_MASTER_DAT.PART_ID"/></fo:block></fo:table-cell>
<fo:table-cell><fo:block padding-top="0.75mm"><xsl:value-of select="data/T_MASTER_DAT.PART_VERSION"/></fo:block></fo:table-cell>
<fo:table-cell><fo:block padding-top="0.75mm"><xsl:value-of select="data/T_MASTER_DAT.LEV_IND"/></fo:block></fo:table-cell>
</fo:table-row>
</xsl:when>
<xsl:otherwise>
<xsl:if test="string-length(data/T_MASTER_DAT.PART_ID) > 0">
<fo:table-row>
<fo:table-cell><fo:block padding-top="0.75mm"><xsl:value-of select="data/T_MASTER_STR.POS_NO"/></fo:block></fo:table-cell>
<fo:table-cell><fo:block padding-top="0.75mm"><xsl:value-of select="data/T_MASTER_DAT.PART_ID"/></fo:block></fo:table-cell>
<fo:table-cell><fo:block padding-top="0.75mm"><xsl:value-of select="data/T_MASTER_DAT.PART_VERSION"/></fo:block></fo:table-cell>
<fo:table-cell><fo:block padding-top="0.75mm"><xsl:value-of select="data/T_MASTER_DAT.LEV_IND"/></fo:block></fo:table-cell>
</fo:table-row>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test="$FK < '10330'">
<xsl:for-each select="dataarea_20/records/records/data/">
<fo:table-cell><fo:block padding-top="0.75mm"><xsl:value-of select="T_MASTER_STR.POS_NO"/></fo:block></fo:table-cell>
</xsl:for-each>
</xsl:if>
</xsl:for-each>

Die Regel hierfür sind: Wenn aktueller Artikel (T_MASTER_DAT.CUR_FLAG = y) grösser 10330 ist, dann wird dieser ausgegeben. Wenn aktueller Artikel (T_MASTER_DAT.CUR_FLAG = y) kleiner 10330 dann Überprüfung ob ein anderer Artikel mit der gleichen Position mit 10540, 10740 oder 10840 existiert und gebe diesen dann aus. Mein Problem ist, das mein obriges Code die zweite Schleife nicht durchläuft. Hab alles versucht um zu einer Lösung zu kommen. Für jegliche Hilfe was ich hier falsch gemacht habe oder wie ich es anders machen kann wäre ich sehr dankbar.

Vielen Dank im Voraus.

Mfg Martin