Announcement

Collapse
No announcement yet.

Problem mit template

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

  • Problem mit template

    Hallo, ich bin neu hier und in sachen xml/xsl auch noch anfänger.

    ich habe in meinem studium nun eine aufgabe bekommen die wie folgt lautet.

    Entwickeln Sie eine Tiefflieger-Abfrage, die alle Radarkontakte unterhalb einer
    einzugebenden Höhe an einem einzugebenden Datum anzeigt. Das XSLT soll
    clientseitig laufen.

    Soweit so gut, ich bekomme die abfrage und die ausgebe hin. zusätzlich will ich aber jetzt noch dass ich eine meldung bekomme : nix gefunden, wenn auch wirklich nichts in meiner xml datei gefunden wurde.

    aber das bekomme ich einfach nicht hin.

    wo müsste ich diese abfrage machen?

    Code:
    <?xml version="1.0" encoding="utf-8"?><!-- DWXMLSource="radarbox/radarbox.xml" --><!DOCTYPE xsl:stylesheet> 
       
        <!-- 	##################################################################################
        		##################### Entwicklung Tiefflieger-Abfrage ############################
       			##################################################################################-->
        
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
    <xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
    <xsl:variable name="hoehe" select="php:function('getHoehe')"/>
    <xsl:variable name="datum" select="php:function('getDatum')"/>
    	
                <xsl:template name="abfrage" match="/RADARBOX/MODESMESSAGE">
                
                <!-- if abfrage für den hoehenabgleich u. datum	-->
                <xsl:if test="./ALTITUDE/text() &lt; $hoehe  and substring(./DATETIME/text(),1,8)=$datum" >	
                    <br/>
                    Flughoehe:	<xsl:value-of select="./ALTITUDE/text()"/><br/> 
                    Datum:		<xsl:value-of select="substring(./DATETIME/text(),1,4)"/><span>-</span>
                                <xsl:value-of select="substring(./DATETIME/text(),5,2)"/><span>-</span>
                                <xsl:value-of select="substring(./DATETIME/text(),7,2)"/><br/>
                    Uhrzeit:	<xsl:value-of select="substring(./DATETIME/text(),9,2)"/><span>:</span>
                                <xsl:value-of select="substring(./DATETIME/text(),11,2)"/><span>:</span>
                                <xsl:value-of select="substring(./DATETIME/text(),13,2)"/><br />
                            <xsl:value-of select="./CALLSIGN/text()"/>
                        
                    <br/>
                
                </xsl:if>
                </xsl:template>
    </xsl:stylesheet>

  • #2
    Verwende statt xsl:if das Konstrukt xsl:choose mit (ggf. mehreren) xsl:when-Elementen und einem xsltherwise-Element, was if ... else if ... else in anderen Sprachen entspricht.

    BTW: Wenn das XSLT-Stylesheet clientseitig laufen soll, dann kann es keine PHP-Funktionen mittels php:function() aufrufen. Es ist über die document()-Funktion dennoch möglich, Daten aus einem serverseitigen Script einzubinden. Dazu muss das Script seinen Output einfach als XML liefern [Beispiel für Datum-/Zeit mit PHP]. Letzteres geht unter XSLT/XPath 2.0 auch ohne Serverabfrage.

    Comment


    • #3
      Hi, danke für deine antwort.
      das mit dem choose und when hab ich schon gemacht, aber dann bekomme ich zwischen den ausgaben ein "nix gefunden".

      er geht ja quasi ins xml sucht nach dem passenden und geht dann weiter im template, wenn er also am anfang nichts findet dann sagt er "nix gefunnden" und fängt wieder von vorne an mit dem nächsten element. wenn er jetzt was findet dann gibt er mir die daten aus und so weiter bis halt das xml zuende ist.

      kann ich nicht ein template erstellen das erst prüft ob generell was gefunden wird. wenn ja dann setzt er eine variable auf 1 wenn nicht dann lässt er sie auf 0

      und dann kann ich im nächsten template eine when:therwise abfrage machen.

      hab sowas schon ausprobiert aber hat nicht geklappt.

      Comment


      • #4
        Das kann ich mir jetzt mangels XML-Inhalten schlecht vorstellen. Rufe das Template entsprechend oft auf (über xsl:apply-templates bzw. in einem xsl:for-each-Konstrukt). Dann kann jeweils xsl:choose verwendet werden.

        Comment


        • #5
          So, habs jetzt selbst hinbekommen. trotzdem danke für den tip.


          Code:
          <?xml version="1.0" encoding="utf-8"?><!-- DWXMLSource="radarbox/radarbox.xml" --><!DOCTYPE xsl:stylesheet> 
             
              <!-- 	#######################################
              		##################### Entwicklung Tiefflieger-Abfrage     #######################################-->
              
          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
          <xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
          <xsl:variable name="hoehe" select="php:function('getHoehe')"/>
          <xsl:variable name="datum" select="php:function('getDatum')"/>
          
          <xsl:template match="/RADARBOX">
          
            <xsl:variable name="anzahl_hoehe" select="count(./MODESMESSAGE/ALTITUDE[text() &lt; $hoehe])"/>
              <xsl:variable name="anzahl_datum" select="count(./MODESMESSAGE/DATETIME[substring(text(),1,8) = $datum])"/>
          
          			<xsl:if test="$anzahl_hoehe &gt; 0 and $anzahl_datum &gt; 0">
                      	
                          <!--	Gibt die anzahl des treffer wieder
                      	<xsl:value-of select="count(./MODESMESSAGE/ALTITUDE[text() &lt; $hoehe])"/><br />
                          <xsl:value-of select="count(./MODESMESSAGE/DATETIME[substring(text(),1,8) = $datum])"/>
                          -->
                          
                          <xsl:apply-templates select="/RADARBOX/MODESMESSAGE"/>
                          
                      </xsl:if>
                      
                      <xsl:if test="$anzahl_hoehe &lt; 1 or $anzahl_datum &lt; 1">
                      		<xsl:if test="$anzahl_hoehe &lt; 1">
                              	Die eingegebene Höhe: <xsl:value-of select="$hoehe"/> ist zu niedrig !!!
                                  <br />
          						Nix gefunden!!!
                                  <br />
                              </xsl:if>
                              
                              <xsl:if test="$anzahl_datum &lt; 1">
                       Am <xsl:value-of select="substring($datum,7,2)"/><span>.</span>
              			<xsl:value-of select="substring($datum,5,2)"/><span>.</span>
              			<xsl:value-of select="substring($datum,1,4)"/> flog niemand unter <xsl:value-of select="$hoehe"/>
                              </xsl:if>                    
                      
                      </xsl:if> 
          </xsl:template>
          
          <xsl:template match="/RADARBOX/MODESMESSAGE">
          	<xsl:if test="./ALTITUDE/text() &lt; $hoehe  and substring(./DATETIME/text(),1,8)=$datum" >		
                          <br/>
          	Flughoehe:	<xsl:value-of select="./ALTITUDE/text()"/><br/> 
          	Datum:		<xsl:value-of select="substring(./DATETIME/text(),1,4)"/><span>-</span>
              			<xsl:value-of select="substring(./DATETIME/text(),5,2)"/><span>-</span>
              			<xsl:value-of select="substring(./DATETIME/text(),7,2)"/><br/>
              Uhrzeit:	<xsl:value-of select="substring(./DATETIME/text(),9,2)"/><span>:</span>
              			<xsl:value-of select="substring(./DATETIME/text(),11,2)"/><span>:</span>
                          <xsl:value-of select="substring(./DATETIME/text(),13,2)"/><br />
              			<xsl:value-of select="./CALLSIGN/text()"/>
                  
             				<br/>
                          
                          
               </xsl:if>
          
          </xsl:template>
          
          </xsl:stylesheet>

          Comment

          Working...
          X