Announcement

Collapse
No announcement yet.

XSL position() Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XSL position() Problem

    Hallo zusammen,

    folgende Problematik:
    Ich habe eine Tabelle, die im XSL mit einer :for-each: Schleife gefüllt wird. Zu jedem Datensatz erscheint ein Button, wenn gewisse Bedingungen erfüllt sind. Jetzt möchte ich den jeweiligen Buttons ein Index mitgeben, damit ich in meinem VB Code erkenne welcher Button geklickt ist, und welcher Datensatz zur Verarbeitung soll. Meine Idee war in jedem Schleifendurchlauf die position() mitzugeben:

    HTML Code:
    <input class="{$bgcolor}" style="border:0" border="0" type="image" src="cms/images/but_aendern.gif"  title="Ändern" href="javascript:;" onclick="Button='cmdAendern'">
    <xsl:attribute name="name"><xsl:value-of select="../../../../@Name"/>_<xsl:value-of select="../../../../@PageletId"/>_btnAendernList</xsl:attribute>
    <xsl:attribute name="value"><xsl:value-of select="position()"/></xsl:attribute>
    </input>
    Leider sieht mein XML String, den ich über vb aufbaue folgendermaßen aus:
    HTML Code:
    <Request>
      <TabName>*******</TabName>
      <PageletId>********</PageletId>
      <UserId>*********</UserId>
      <Doc/>
      <LEC/>
      <Action>btnAendernList.y</Action>
      <Parameters>
    	<Param Name="STR_DepotNr" Value="999999999999"/>
    	<Param Name="STR_WKN" Value="803200"/>
    	<Param Name="TEST" Value="6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 35, 36, 37, 38, 39, 40, 41"/>
      </Parameters>
    </Request>
    Er schreibt alle Positionen (die, die angezeigt werden dürfen/sollen) unter "TEST" Value und nicht, wie gewünscht die aktuelle Position.

    Gibt es da andere Möglichkeiten nur genau DIE Position zu übergeben, die zu dem gehörigen Button gehört, der geklickt wurde?

    Danke und vg,

    K

  • #2
    Poste am besten minimale, aber komplette Beispiele, die es uns einfach erlauben, das Problem zu reproduzieren.
    Wenn du uns XSLT-Code mit einem "input"-Element zeigst, aber dann im angeblichen Resultat gar kein "input"-Element existiert, sondern "Param"-Elemente, vermag zumindest ich überhaupt nicht zu erkennen, was der Zusammenhang zwischen den beiden Codebeispielen sein soll.

    Comment


    • #3
      Das zweite Codebeispiel ist das Ergebnis aus meinem VB Code in Form einer XML Datei. Soll Euch/Dir nur zeigen, dass er sich aus dem XSL mit "<xsl:attribute name="value"><xsl:value-of select="position()"/></xsl:attribute>" nicht die aktuelle Position rauszieht, sondern ALLE positionen, bei denen der Button angezeigt wird.

      Comment


      • #4
        Ich formuliere die Frage um. Genereller.

        Ich habe eine For-Each schleife und möchte jeden Datensatz mit einem Index versehen um ihn später ansprechen zu können. Wie ist das zu realisieren?

        Comment


        • #5
          Mit position() oder auch mit xsl: number kann man einen Index generieren, also etwa als Beispiel
          Code:
          <root>
            <items>
              <item>foo</item>
              <item>bar</item>
              <item>baz</item>
            </items>
          </root>
          daraus macht Saxon 6.5.5 dann mit dem Stylesheet
          Code:
          <xsl:stylesheet
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            version="1.0">
            
            <xsl:output method="html" indent="yes"/>
            
            <xsl:template match="items">
              <form>
                <!-- example for position -->
                <xsl:for-each select="item">
                  <input name="input{position()}" value="{.}"/>
                </xsl:for-each>
              </form>
              <table>
                <!-- example for xsl: number -->
                <xsl:for-each select="item">
                  <tr>
                    <th><xsl:number/></th>
                    <td><xsl:value-of select="."/></td>
                  </tr>
                </xsl:for-each>
              </table>
            </xsl:template>
            
          </xsl:stylesheet>
          das Resultat
          Code:
          <form><input name="input1" value="foo"><input name="input2" value="bar"><input name="input3" value="baz"></form>
          <table>
             <tr>
                <th>1</th>
                <td>foo</td>
             </tr>
             <tr>
                <th>2</th>
                <td>bar</td>
             </tr>
             <tr>
                <th>3</th>
                <td>baz</td>
             </tr>
          </table>

          Comment

          Working...
          X