Announcement

Collapse
No announcement yet.

Variablen in Stylesheet einbetten mit Namespace

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

  • Variablen in Stylesheet einbetten mit Namespace

    Hallo

    Ich habe ein Verständnisproblem. Wieso klappt des nicht?


    Code:
    <xsl:stylesheet 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:ns="my:ns"
     xmlns:test="http://test.org"
     exclude-result-prefixes="test ns"
     version="1.0">
    
    <!-- 1. Monate mit "internen" Namespace anlegen -->
    <ns:months>
            <m id="01">January</m>
            <m id="02">February</m>
            <m id="03">March</m>
            <m id="04">April</m>
            <m id="05">May</m>
            <m id="06">June</m>
            <m id="07">July</m>
            <m id="08">August</m>
            <m id="09">September</m>
            <m id="10">October</m>
            <m id="11">November</m>
            <m id="12">December</m>
    </ns:months>
    
    
    
    
    <xsl:template match="/">
    
    <!-- 2. Einzelne Variablen mit Namespace anlegen -->
    <test:a>Beschreibung</test:a>
    <test:a>Quellcode</test:a>
    <test:a>Daten</test:a>
    
    
    1. <xsl:value-of select="document('')/*/ns:months/*"/><hr/>
    2. <xsl:value-of select="document('')/*/test:a"/><hr/>
    
    
    </xsl:template>
    </xsl:stylesheet>


    Vielen Dank für einen Hinweis

  • #2
    Erkläre bitte, was genau "nicht klappt", also welches Resultat du erreichen willst und welches du erhältst.
    Der Pfad
    Code:
    document('')/*/test:a
    soll vermutlich eher
    Code:
    document('')/*/*/test:a
    lauten.
    Aber während das Anlegen von Daten in einem Namensraum direkt als Kind des xsl: stylesheet-Elementes üblich ist, ist dein zweites Beispiel zwar möglich, aber eher nicht üblich, da dabei ja Resultatselemente im Template angelegt werden, die dann auch ausgegeben werden.

    Comment


    • #3
      Vielen Dank für deine nochmalige Unterstützung!

      OK - Dann bleiben wir bei Lösungsansatz eins und zwei wird gestrichen.


      Mein Ziel ist ein HTML select Element mit option Elementen, wobei eine option "selected" ist.

      Die Optionen hole ich aus den Daten mit den neu angelegten Namespace.


      Code:
      <xsl:stylesheet 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       xmlns:ns="my:ns"
       exclude-result-prefixes="ns"
       version="1.0">
      
      <!-- 1. Monate -->
      <ns:months>
              <m id="01">January</m>
              <m id="02">February</m>
              <m id="03">March</m>
              <m id="04">April</m>
              <m id="05">May</m>
              <m id="06">June</m>
              <m id="07">July</m>
              <m id="08">August</m>
              <m id="09">September</m>
              <m id="10">October</m>
              <m id="11">November</m>
              <m id="12">December</m>
      </ns:months>
      
      
      
      <xsl:template match="/">
      
      <!-- Selected -->
      <xsl:variable name="month"/>3</xsl:variable>
      
      <label>Monat: </label>
      <select name="month" size="1">
        <xsl:for-each select="document('')/*/*/ns:months//node()">
          <option value="{@id}"><xsl:value-of select="."/></option> 
          <!-- Hier fehlt noch selected oder besser alles per xslt:element generieren ? -->
        </xsl:for-each>
      </select>
      
      
      </xsl:template>
      </xsl:stylesheet>

      Comment


      • #4
        Habe das Stylesheet überarbeitet. Irgentwo muss des Problem liegen.

        per document('')/*/ns:months/*

        bekomme ich den nodeset nicht in die Schleife. Freue mich über jeden Hinweis.






        Code:
        <xsl:stylesheet 
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         xmlns:ns="my:ns"
         exclude-result-prefixes="ns"
         version="1.0">
        
        <!-- 1. Monate -->
        <ns:months>
                <m id="01">January</m>
                <m id="02">February</m>
                <m id="03">March</m>
                <m id="04">April</m>
                <m id="05">May</m>
                <m id="06">June</m>
                <m id="07">July</m>
                <m id="08">August</m>
                <m id="09">September</m>
                <m id="10">October</m>
                <m id="11">November</m>
                <m id="12">December</m>
        </ns:months>
        
        
        
        <xsl:template match="/">
        
        
        <!-- Selected -->
        <xsl:variable name="month">3</xsl:variable>
        
        <label>Monat: </label>
        <select name="month" size="1">
          <xsl:for-each select="document('')/*/ns:months/*">
            <xsl:element name="option" value="{@id}">
              <xsl:if test="$month=@id">
                <xsl:attribute name="selected">selected</xsl:attribute>
              </xsl:if>
              <xsl:value-of select="."/>
            </xsl:element>
          </xsl:for-each>
        </select>
        
        
        </xsl:template>
        </xsl:stylesheet>

        Comment


        • #5
          So
          Code:
          <xsl:stylesheet 
           xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
           xmlns:ns="my:ns"
           exclude-result-prefixes="ns"
           version="1.0">
           
           <xsl:output method="html" indent="yes"/>
          
          <!-- 1. Monate -->
          <ns:months>
                  <m id="01">January</m>
                  <m id="02">February</m>
                  <m id="03">March</m>
                  <m id="04">April</m>
                  <m id="05">May</m>
                  <m id="06">June</m>
                  <m id="07">July</m>
                  <m id="08">August</m>
                  <m id="09">September</m>
                  <m id="10">October</m>
                  <m id="11">November</m>
                  <m id="12">December</m>
          </ns:months>
          
          
          
          <xsl:template match="/">
          
          
          <!-- Selected -->
          <xsl:variable name="month">03</xsl:variable>
          
          <label>Monat: </label>
          <select name="month" size="1">
            <xsl:for-each select="document('')/*/ns:months/*">
              <option value="{@id}">
                <xsl:if test="$month=@id">
                  <xsl:attribute name="selected">selected</xsl:attribute>
                </xsl:if>
                <xsl:value-of select="."/>
              </option>
            </xsl:for-each>
          </select>
          
          
          </xsl:template>
          </xsl:stylesheet>
          sollte es klappen.

          Comment


          • #6
            Leider nein - habe zu Testzwecken die Knoten gezählt - Ergebnis 0



            Code:
            <xsl:stylesheet 
             xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
             xmlns:ns="my:ns"
             exclude-result-prefixes="ns"
             version="1.0">
             
             <xsl:output method="html" indent="yes"/>
            
            <!-- 1. Monate -->
            <ns:months>
                    <m id="01">January</m>
                    <m id="02">February</m>
                    <m id="03">March</m>
                    <m id="04">April</m>
                    <m id="05">May</m>
                    <m id="06">June</m>
                    <m id="07">July</m>
                    <m id="08">August</m>
                    <m id="09">September</m>
                    <m id="10">October</m>
                    <m id="11">November</m>
                    <m id="12">December</m>
            </ns:months>
            
            
            
            <xsl:template match="/">
            
            <xsl:value-of select="count(document('')/*/ns:months/*)"/>
            
            
            </xsl:template>
            </xsl:stylesheet>

            Comment


            • #7
              Wenn ich dein Stylesheet z.B. mit Saxon 6.5.5 ausführe, wird "12" ausgegeben. Keine Ahnung, warum du "0" als Ergebnis erhältst.

              Comment


              • #8
                Ziemlich verwirrend, dass es nicht klappt.

                Habe PHP Server Version: 5.1.41
                Kann man per XSLT Systemdaten wie Saxon Version usw abzufragen?

                Comment


                • #9
                  PHP habe ich hier nicht, meines Wissens benutzt PHP 5 libxslt als XSLT-Prozessor. Mit xsltproc, der Kommandozeilenversion von libxslt, bekomme ich als Resultat auch "12". Getestet mit
                  Code:
                  xsltproc.exe --version
                  Using libxml 20707, libxslt 10126 and libexslt 815
                  xsltproc was compiled against libxml 20706, libxslt 10126 and libexslt 815
                  libxslt 10126 was compiled against libxml 20706
                  libexslt 815 was compiled against libxml 20706
                  unter Windows 7.
                  Du solltest mit PHP durch phpinfo() Details zur PHP-Installation anzeigen lassen können. Ansonsten muss du mal warten, ob andere PHP-Benutzer hier lesen, oder du musst in http://entwickler-forum.de/forumdisplay.php?f=241 fragen, ob andere PHP-Benutzer das Problem reproduzieren können.

                  Comment


                  • #10
                    Nochmals vielen Dank für dein Bemühen. Ich werd mal weiterfragen.

                    Comment

                    Working...
                    X