Announcement

Collapse
No announcement yet.

Alles kopieren nur Attribute sollen geändert werden???

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

  • Alles kopieren nur Attribute sollen geändert werden???

    Hallo ich habe ein riesen Problem mit XSLT 1.0
    Ab Seite 2 sollen wird das top Attribut bei allen text-Tags erhöht und zwar so:

    Seitennummer * 4000 + Wert.

    Beispiel Seite 2: 2 * 4000 + 10
    Beispiel Seite 3: 3 * 4000 + 15
    usw.

    Am Ende soll es nur ein page geben mit allen text Tags drinnen und mit der top Änderung.

    Falls das nicht machbar ist, dann: Soll alles so kopiert werden wie wie im Original, nur dass eben die tops erhöht werden.

    Start XML:

    Code:
    <page @number='1'>
    <text @left='10' @top='20'/>
    <text @left='11' @top='30'/>
    </page>
    
    <page @number='2'>
    <text @left='10' @top='10'/>
    <text @left='11' @top='20'/>
    </page>
    
    
    <page @number='3'>
    <text @left='10' @top='15'/>
    <text @left='11' @top='25'/>
    </page>
    Perfektes Ergebnis XML

    Code:
    <page>
    <text @left='10' @top='20'/>
    <text @left='11' @top='30'/>
    
    <text @left='10' @top='8010'/>
    <text @left='11' @top='8020'/>
    
    <text @left='10' @top='12015'/>
    <text @left='11' @top='12025'/>
    <page>
    Auch gut, wenn es so ist.

    Code:
    <page @number='1'>
    <text @left='10' @top='20'/>
    <text @left='11' @top='30'/>
    </page>
    <page @number='2'>
    <text @left='10' @top='8010'/>
    <text @left='11' @top='8020'/>
    </page @number='3'>
    <text @left='10' @top='12015'/>
    <text @left='11' @top='12025'/>
    </page>
    Vielen Dank,
    Tamer

  • #2
    Die Attribute können natürlich kein @-Zeichen am Anfang haben, das ist das Kürzel für die attribute::Achse in XPath. Dieser Code sollte das Problem lösen:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
      <xsl:template match="/">
        <page>
          <xsl:apply-templates select="//page"/>
        </page>
      </xsl:template>
    
      <xsl:template match="page">
        <xsl:apply-templates select="text"/>
      </xsl:template>
    
      <xsl:template match="text">
        <text left="{@left}">
          <xsl:attribute name="top">
            <xsl:choose>
              <xsl:when test="../@number >= 2">
                <xsl:value-of select="../@number * 4000 + @top"/>
              </xsl:when>
              <xsl:otherwise><xsl:value-of select="@top"/></xsl:otherwise>
            </xsl:choose>    
          </xsl:attribute>  
        </text>
      </xsl:template>
    
    </xsl:stylesheet>
    Ergebnis:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <page>
      <text left="10" top="20"/>
      <text left="11" top="30"/>
      <text left="10" top="8010"/>
      <text left="11" top="8020"/>
      <text left="10" top="12015"/>
      <text left="11" top="12025"/>
    </page>
    Zuletzt editiert von Thomas Meinike; 14.12.2009, 16:25. Reason: XML-Ergebnis hinzugefügt.

    Comment


    • #3
      juhu juhu juhu Danke.
      Klar wollte das mit dem Attribut nur verdeutlichen.
      Vielen vielen Dank.

      Comment

      Working...
      X