Announcement

Collapse
No announcement yet.

<xsl:apply-templates> oder <xsl:for-each> ?

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

  • <xsl:apply-templates> oder <xsl:for-each> ?

    Hallo,

    kennt einer den Unterschied zwischen diesen beiden Varianten. Wann sollte man <xsl:apply-templates> nutzen und wann <xsl:for-each>?

    Danke.

  • #2
    apply-templates wird auch als "push processing" bezeichnet, beim dem die Knoten zu passenden Templates "geschoben" (push) werden, for-each als "pull processing", beim dem die Knoten "hereingezogen" (pull) werden.

    Mittels push processing kann man Stylesheets sehr schön strukturieren, indem man Templates für die verschiedenen Knoten schreibt, die im Eingabedokument enthalten sind. (Reines) pull processing resultiert dagegen eher in einem einzigen Template, das dann viele geschachtelte for-each enthalten kann und schnell unübersichtlich wird.

    Comment


    • #3
      Hallo, ok danke für die Antwort.

      Jetzt noch eine Frage zum Thema:

      Beide Stylesheets erzeugen im Grunde denselben XML-Output.

      Welches der beiden Stylesheets ist "besser" programmiert?


      Stylesheet mit for-each:
      Code:
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" exclude-result-prefixes="w">
      
        <xsl:output method="xml" indent="yes" encoding="utf-8"/>
       
       
       
         <xsl:template match="/">
      <document_content>
          <xsl:for-each select="//w:t">
          <text>
          <xsl:value-of select="." />
          </text>
          </xsl:for-each>
      </document_content>
        </xsl:template>
      
      
      
      </xsl:stylesheet>

      Stylesheet mit apply-templates:
      Code:
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" exclude-result-prefixes="w">
      
        <xsl:output method="xml" indent="yes" encoding="utf-8"/>
       
       
       
         <xsl:template match="/">
      <document_content>
        <xsl:apply-templates select="//w:t" />
      </document_content>
        </xsl:template>
      
         <xsl:template match="w:t">
          <text>
          <!--<xsl:apply-templates select="."/>-->
          <xsl:value-of select="." />
          </text>
        </xsl:template>
      
      
      
      
      </xsl:stylesheet>
      Zuletzt editiert von ultimate-hunteR; 10.03.2010, 15:38.

      Comment


      • #4
        Bei allen Beurteilungen wie "besser" muss man erst klare Kriterien definieren, anhand der man die Qualität beurteilen will.
        Der zweite Ansatz mit push processing lässt sich einfacher und modularer erweitern und ist daher meiner Meinung generell vorzuziehen. Aber wenn klar ist, dass nur wenige Daten extrahiert werden müssen und Erweiterungen nicht benötigt werden, dann kann man für einfache Aufgaben auch pull processing verwenden.

        Comment

        Working...
        X