Announcement

Collapse
No announcement yet.

exsl+dyn kombinieren

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

  • exsl+dyn kombinieren

    Hallo

    Vielleich hat jemand von euch eine Idee oder Hinweis.

    Ein etwas spezielles Problem (eigentlich zwei). Ich baue gerade eine Pipe auf (Danke Martin für deinen Hinweis), möchte jedoch einen etwas vereinfachten Weg gehen als Xproc.

    Die Pipe besteht aus
    quelle->filter->output schön sauber getrennt voneinander.

    Ich habe zwei Probleme [template:filter]
    a) Wie verarbeite ich den node-set ($p_sAxis) mit den Schritt welcher dyn erzeugt wird.
    b) Wie übergebe ich den Nodeset an den nächsten template ohne per xsl.value-of auszugeben
    (es soll nur das Ergebnis von output sichtbars sein)

    Vielleicht gibts ja auch eine einfacheren Lösungsansatz....

    Code:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
     xmlns:dyn="http://exslt.org/dynamic"
     xmlns:exsl="http://exslt.org/common"
     extension-element-prefixes="dyn exsl">
    
    <xsl:template match="/">
    
      <xsl:call-template name="output"/>
    
    </xsl:template>
        
    
    
    <!-- **
    * @NAME: INPUTFEED
    * @V0.1: 2000.01.01 TEXT
    *-->	
    <xsl:template name="inputFeed">
      <xsl:param name="p_sURL">http://www.wattgehtab.com/ninjarsssyndicator</xsl:param>
    
      <xsl:value-of  select="document($p_sURL)"/>
    
    </xsl:template>
        
    
    <!-- **
    * @NAME: FILTER
    * @V0.1: 2000.01.01 TEXT
    *-->	
    <xsl:template name="filter">
      <xsl:param name="p_sSource"><xsl:call-template name="inputFeed"/></xsl:param>
      <xsl:param name="p_sContextNode"></xsl:param>
      <xsl:param name="p_sAxis">//</xsl:param>
      <xsl:param name="p_sNodeTest">*</xsl:param>
      <xsl:param name="p_sPredicates"></xsl:param>
    
      <xsl:value-of select="exsl:node-set($p_sAxis)"/>
      <xsl:value-of select="dyn:evaluate(concat($p_sContextNode,$p_sAxis,$p_sNodeTest,$p_sPredicates))"/>
    
    
    </xsl:template>
    
    
    <!-- **
    * @NAME: OUTPUT
    * @V0.1: 2000.01.01 TEXT
    *-->	
    <xsl:template name="output">
      <xsl:param name="p_node"><xsl:call-template name="filter"/></xsl:param>
    
      <xsl:value-of select="$p_node"/>
    
    </xsl:template>
    
    
    
    </xsl:stylesheet>

    Vielen Dank für die Hilfe

  • #2
    Mein Verständnisproblem.

    inputFeed liefert einen nodeset ->
    Wird in parameter p_sSource übergeben ->

    Der erste Versuch (exsl)
    Code:
      <xsl:value-of select="exsl:node-set($p_sSource)/*"/>
    habe ich keine zugriff auf den Nodeset

    Der zweite Versuch (dyn)
    Code:
      <xsl:value-of select="dyn:evaluate(concat($p_sSource,$p_sContextNode,$p_sAxis,$p_sNodeTest,$p_sPredicates))"/>
    klappt genausowenig.

    Meine Frage genauer beschrieben. Wie ich das "Landen" der Daten und die Verarbeitung in zwei verschieden Templats erlädigen kann, bzw wie gebe ich den nodeset weiter und binde diese mit dyn:evaluate ein (die STEPsteuerung erfolgt per parameter).

    Ich hoffe es ist nicht zu abgehoben...möglicher weise gehst auch einfacher.

    Comment


    • #3
      Wenn du im Template mit Namen "inputFeed" ein Dokument laden willst und die Knoten zurückgeben willst, dann benutze im Template copy-of select="document($p_sURL)" statt value-of. Dann sollte auch exsl:node-set($p_sSource)/* ein sinnvolles Resultat liefern.
      Aber zumindest mit XSLT 1.0 macht man sich das Programmieren nur unnötig schwer, wenn man Dinge wie document()-Aufrufe in Templates packt und per copy-of Fragmente erzeugt, die man per exsl:node-set erst wieder in Knotenmengen umwandeln muss.

      Comment


      • #4
        Du hast natürlich recht.

        Es klappt jetzt fast

        Code:
        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
         xmlns:dyn="http://exslt.org/dynamic"
         extension-element-prefixes="dyn">
        
        <xsl:template match="/">
        
          visualisierung von Element:<br/>
          <xsl:call-template name="output"/>
        
        </xsl:template>
            
        
        
        <!-- **
        * @NAME: INPUTFEED
        * @V0.1: 2000.01.01 TEXT
        *-->	
        <xsl:template name="inputFeed">
          <xsl:param name="p_sURL">http://www.wattgehtab.com/ninjarsssyndicator</xsl:param>
        
          <xsl:copy-of select="document($p_sURL)"/>
        
        </xsl:template>
            
        
        <!-- **
        * @NAME: FILTER
        * @V0.1: 2000.01.01 TEXT
        *-->	
        <xsl:template name="filter">
          <xsl:param name="p_sSource"><xsl:call-template name="inputFeed"/></xsl:param>
          <xsl:param name="p_sContextNode"></xsl:param>
          <xsl:param name="p_sAxis">//</xsl:param>
          <xsl:param name="p_sNodeTest">*</xsl:param>
          <xsl:param name="p_sPredicates"></xsl:param>
        
          <xsl:copy-of select="dyn:evaluate(concat($p_sSource,$p_sContextNode,$p_sAxis,$p_sNodeTest,$p_sPredicates))"/>
        
        
        
        </xsl:template>
        
        
        <!-- **
        * @NAME: OUTPUT
        * @V0.1: 2000.01.01 TEXT
        *-->	
        <xsl:template name="output">
          <xsl:param name="p_node"><xsl:call-template name="filter"/></xsl:param>
        
          <xsl:value-of select="$p_node"/>
        
        </xsl:template>
        
        </xsl:stylesheet>
        Mein Problem liegt noch in der dyn:evaluate hier sollte der nodeset dynamisch verarbeitet werden.


        Ich bekomme die Fehlermeldung:
        Code:
        
        Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: Invalid expression in D:\XAMPP_173\xampp\htdocs\index.php on line 347
        
        Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: dyn:evaluate() : unable to evaluate expression ' Wattgehtab.com Newsfeed RSS bietet die Möglichkeit,.........
        Teilweise bekomme ich den Inhalt des RSS jedoch mit Fehlermeldung.


        Danke in Voraus.

        Comment


        • #5
          Folgende Variation deines Code gibt mit xsltproc zumindest eine Ausgabe:
          Code:
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
           xmlns:dyn="http://exslt.org/dynamic"
           xmlns:exsl="http://exslt.org/common"
           extension-element-prefixes="dyn">
          
          <xsl:template match="/">
          
            visualisierung von Element:<br/>
            <xsl:call-template name="output"/>
          
          </xsl:template>
              
          
          
          <!-- **
          * @NAME: INPUTFEED
          * @V0.1: 2000.01.01 TEXT
          *-->	
          <xsl:template name="inputFeed">
            <xsl:param name="p_sURL">http://www.wattgehtab.com/ninjarsssyndicator</xsl:param>
          
            <xsl:copy-of select="document($p_sURL)"/>
          
          </xsl:template>
              
          
          <!-- **
          * @NAME: FILTER
          * @V0.1: 2000.01.01 TEXT
          *-->	
          <xsl:template name="filter">
            <xsl:param name="p_sSource"><xsl:call-template name="inputFeed"/></xsl:param>
            <xsl:param name="p_sContextNode"></xsl:param>
            <xsl:param name="p_sAxis">//</xsl:param>
            <xsl:param name="p_sNodeTest">*</xsl:param>
            <xsl:param name="p_sPredicates"></xsl:param>
          
            <xsl:copy-of select="dyn:evaluate(concat('exsl:node-set($p_sSource)',$p_sContextNode,$p_sAxis,$p_sNodeTest,$p_sPredicates))"/>
          
          
          
          </xsl:template>
          
          
          <!-- **
          * @NAME: OUTPUT
          * @V0.1: 2000.01.01 TEXT
          *-->	
          <xsl:template name="output">
            <xsl:param name="p_node"><xsl:call-template name="filter"/></xsl:param>
          
            <xsl:copy-of select="$p_node"/>
          
          </xsl:template>
          
          </xsl:stylesheet>
          Aber der ganze Aufwand mit verschiedenen Templates und Parametern, nur um die Knoten eines Feeds auszugeben, macht für mich keinen Sinn.

          Comment


          • #6
            Erstmal vielen Dank. Bin noch am Testen.

            Der Sinn - Ich arbeite gerade an einen Microcontrollerprojekt wo bei dieser an LAN hängt. Dieser liefert XML Daten von Sensoren. Die Auswertung bzw Visualisierung erfolgt per HTML5 - SVG. Zum schnellen Testen lege ich einige Templates an welche ich gut kombinieren kann und per Maske am Bildschirm einstelle. Der PHP Teil steht schon und die Oberfläche ist auch schon fertig.

            Die Templates werden praktisch online kombiniert und auch gleich verknüpft. Alles in einen Template ist natürlich einfacher, nur leider nicht geeignet.

            Wenn es eine einfacher Lösung gibt wo Quelle und XPATH in zwei Template getrennt sind und dieser dynamisch veränderbar ist währe das natürlich perfekt.
            Zuletzt editiert von mr_sol; 05.07.2011, 18:19.

            Comment


            • #7
              Da XSLT-Code ja selbst ein XML-Dokument ist, könntest du darüber nachdenken, XSLT per XSLT zu erzeugen bzw. zusammenzufügen. Dann braucht man eventuell kein evaluate mehr.

              Was die Visualisierung mit HTML5 und SVG angeht, interessiert mich, ob du dabei auch XSLT benutzt, um HTML mit SVG zu erzeugen. Welche XSLT 1.0 Ausgabemethode (also output method html oder xml) benutzt du dabei?

              Comment


              • #8
                Zuerst zur einfacheren Antwort

                1) output method="html" (arbeite mit HTML5) mit XSLT erzeugtes SVG
                2) Um Formulare in mein SVG einzubetten
                Code:
                  <foreignObject x="{$x+20}" y="{$y+35}" width="200" height="100">
                    <body xmlns="http://www.w3.org/1999/xhtml">
                    <form>........
                3) SVG binde ich per ein FF4.0 problemlos
                Code:
                  <svg xmlns="http://www.w3.org/2000/svg" width="1000" height="900"> 
                    .......
                  </svg>


                XSLT per XSLT zu erzeugen, ist besser. Die Daten zur Erzeugung (quasi der Bauplan) liegen in XML Form aus der Datenbank vor.

                Danke für die Anregung, ich muss noch Überlegen und Tests machen.

                Vielen Dank für deine nochmalige Hilfe

                Comment

                Working...
                X