Announcement

Collapse
No announcement yet.

XSLT 1.0 der XPATH-Befehl position() [1] bis [last()]

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

  • XSLT 1.0 der XPATH-Befehl position() [1] bis [last()]

    Hallo Zusammen,

    mein Problem:

    Code:
    <root>
    <text left="79" top="1371" width="877" height="46">XX</text>
    <text left="79" top="1375" width="877" height="46">a</text>
    <text left="79" top="1421" width="781" height="46">b</text>
    <text left="79" top="1468" width="720" height="46">c</text>
    <text left="79" top="1515" width="872" height="46">d</text>
    <text left="79" top="1516" width="872" height="46">a</text>
    <text left="79" top="1370" width="877" height="46">YY</text>
    </root>
    Ich habe ein Befehl, welches mir a b c d zurückgeben soll.
    Gleichzeitig aber muss gelten, dass die Werte die dabei herauskommen, einmalig sind.

    Code:
    <root>
    <xsl:value select="set:distinct(//text[@top>1374 and @top<1517][position()>0])"/>
    </roo>
    Ergebnis sollte sein:

    Code:
    <root>
    a b c d
    </root>
    Welches mir alle also text Elemente dazwischen finden soll, mit der einmalig Bedindung.

    Aber das Problem ist, dass ich nur das a bekomme. die b, c d bekomme ich nicht. set:distinct ist exslt.

    Aber wie bekomme ich das nun hin?

    Bräuchte also etwas wie [1] bis [last()]
    Müsste da nicht auch concat auftauchen? Weil ich möchte ja dass die Ergebnisse concateniert werden? Brauch ich da jetzt wirklich eine Schleife??????

  • #2
    Code:
    <?xml version='1.0'?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="xml"/>
    <xsl:key name="only" match="//text" use="."/>
    <xsl:template match="/">
    	<xsl:apply-templates select="root"/>
    </xsl:template>
    
    
    <xsl:template match="root">
    <root>
    	<xsl:for-each select="text[position()&gt;1 and position()&lt;last()][generate-id() =
               generate-id(key('only', .)[1])]">
    		   <xsl:value-of select="."/>
    		   </xsl:for-each>
    	</root>
    </xsl:template>
    
    
    </xsl:stylesheet>
    Code:
    <?xml version='1.0' ?>
    <root>abcd</root>

    Comment


    • #3
      oooh nein

      was hast du denn da geändert? hat das vorherige nicht gestimmt???
      Weil ich hab das ausprobiert und das geht wunderbar???

      voher:

      Code:
      <xsl:stylesheet
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0">
        
        <xsl:output indent="yes"/>
        
        <xsl:key name="k1" match="text" use="."/>
        
        <xsl:template match="/">
          <xsl:copy>
            <xsl:for-each select="//text[@top &gt; 1374 and @top &lt; 1517][generate-id() = generate-id(key('k1', .)[1])]">
              <xsl:value-of select="."/>
              <xsl:if test="position() != last()"><xsl:text> </xsl:text></xsl:if>
            </xsl:for-each>
          </xsl:copy>
        </xsl:template>
      
      </xsl:stylesheet>
      Zuletzt editiert von Tamer; 25.11.2009, 17:39.

      Comment


      • #4
        habe nichts geändert

        habe am code nichts geändert

        sonst wäre ein änderung anzeige vom forum zusehen

        Comment

        Working...
        X