memo: random.org via xsl

Hi

Ich möchte gerne über random.org eine Zufallszahl generieren (zwischen 1 und 200), und dann via XSL auf diese Zufallszahl zugreifen.

Das Generieren der Zufallszahl macht keine Probleme. Dies geschieht ganz gewöhnlich über HTTP:
http://www.random.org/integers/?num=1&min=1&max=200&col=1&base=10&format=plain&rnd=new

Die Zufallzahl wird dann auf einer Seite mit folgender Struktur ausgegeben:

  
<html>  
  <body>  
    <pre> 125 </pre>  
  </body>  
</html>  
  

Ich versuche nun wie folgt auf die Zahl zuzureifen:

  
  
<xsl:variable name="http://www.random.org/integers/?num=1&amp;min=1&amp;max=15&amp;col=1&amp;base=10&amp;format=plain&amp;rnd=new</xsl:variable>  
  
<xsl:value-of select="document($randomID)/html/body/pre"/>  
  

Leider erhalte ch immer nur die folgende Fehlermeldung:
parser error : Start tag expected, '<' not found

Hat jemand eine Idee?
Wäre so gut !

Herzlichen Dank
memo

  1. Hallo Memo,

    Ich versuche nun wie folgt auf die Zahl zuzureifen:

    <xsl:variable name="http://www.random.org/integers/?num=1&amp;min=1&amp;max=15&amp;col=1&amp;base=10&amp;format=plain&amp;rnd=new</xsl:variable>

    <xsl:value-of select="document($randomID)/html/body/pre"/>

      
    name ist der Variablenname, mit select (oder innerhalb von xsl:variable) wird der Wert zugewiesen:  
      
    `<xsl:variable name="randomID" select="document('http://www.random.org/integers/?num=1&amp;min=1&amp;max=200&amp;col=1&amp;base=10&amp;format=plain&amp;rnd=new')"/>`{:.language-xml}  
      
    Funktioniert aber nur im Firefox und selbst dort erscheint noch ein Verarbeitungsfehler vor der Zufallszahl, welcher sich "abschneiden" lässt:  
      
    `<xsl:value-of select="substring-before(substring-after($randomID, 'Spalte 1:'), '^')"/>`{:.language-xml}  
      
    Insofern also kaum browsertauglich. Probiere es mal mit [EXSLT](http://www.exslt.org/random/).  
      
    Grüße,  
    Thomas
    
    1. Vielen Dank für die schnelle Antwort

      Sorry, das mit @name, @select und dem nicht geschlossenen Wert waren Flüchtigkeitsfehler, daran hat es nicht gelegen.

      ... kaum browsertauglich. Probiere es mal mit EXSLT.

      Meines Wissens erstellt das nur Zufallszahlen zwischen 0 und 1  ?

      1. Hallo memo,

        Meines Wissens erstellt das nur Zufallszahlen zwischen 0 und 1  ?

        Ja, wie bei Math.random() und Co. XPath-Ansatz:

        floor($von + ($bis - $von + 1) * $random);

        Grüße,
        Thomas

        1. Hallo Thomas

          floor($von + ($bis - $von + 1) * $random);

          Soweit kann ich eine Zufallszahl zwischen 1 und 200 generieren, und beispielsweise in ein Div mit id=randomID einlesen.

            
            
          <script type="text/javascript">  
            
               Number.random = function(min,max){  
               return Math.floor(Math.random()*(max-min+1)+min);  
               };  
            
               var randomNumber = Number.random(1,200);  
               x=document.getElementById("randomID") 		  
               x.innerHTML= (randomNumber);  
            
          </script>  
            
          
          

          Aber wie kann ich diese Variable in XSL nutzen ??

            
              <xsl:apply-templates select="document('texte.xml')/texte/text[@id = $randomID]"/>  
          
          

          Spreche leider nicht richtig javascript und komm' nicht drauf ..   :-(
          Herzlichen Dank für'n Tipp

          Memo

          1. Hallo memo,

            Aber wie kann ich diese Variable in XSL nutzen ??

            Der XSLT-Prozessor weiß zum Aufrufzeitpunkt des XML-Dokuments nichts von JavaScript. Probiere alternativ die Ansteuerung der Transformation mit JavaScript und übergib die Zufallszahl als xsl:param. Dazu sollte es im Archiv Threads geben (Unterschiede zwischen IE, FF & Co. beachten).

            Warum nicht EXSLT?

            Grüße,
            Thomas

  2. Hallo,

    <xsl:variable name="http://www.random.org/integers/?num=1&amp;min=1&amp;max=15&amp;col=1&amp;base=10&amp;format=plain&amp;rnd=new</xsl:variable>

    plain&amp;rnd=new"> <- schließen!

    Ich weiß nicht, ob das überhaupt funktioniert, aber wenn, dann ist das der @value und nicht der @name.

    Viele Grüße
    Siri

  3. Hi
    Das Generieren der Zufallszahl macht keine Probleme. Dies geschieht ganz gewöhnlich über HTTP:
    http://www.random.org/integers/?num=1&min=1&max=200&col=1&base=10&format=plain&rnd=new

    Die Zufallzahl wird dann auf einer Seite mit folgender Struktur ausgegeben:
    [code lang=html]
    <html>
      <body>
        <pre> 125 </pre>
      </body>
    </html>

    ...

    Leider erhalte ch immer nur die folgende Fehlermeldung:
    parser error : Start tag expected, '<' not found

    Hat jemand eine Idee?

    Ja. Bei mir kommt NUR DIE ZAHL als Text/Plain an und nicht, in dem von Dir dargestellten HTML. Der "Fehler" ist also die Konsequenz (D)einer falschen Vorstellung darüber, was random.org zurückliefert. Das Format hast Du mit dem Parameter auch bestellt:

    ... &format=plain

    Jörg Reinholz

    1. Ja. Bei mir kommt NUR DIE ZAHL als Text/Plain an und nicht, in dem von Dir dargestellten HTML.

      Vielen Dank für die Rückmeldung

      Habe es gerade nochmal angesehen
      Wenn ich das Element mit Firebug untersuche, wird es wie von mir angegeben in HTML ausgegeben.
      Wenn ich mir den Quelltext mit Bordmitteln anzeigen lasse, stimmt es, was du sagt: plain!
      Bin jetzt doch ein wenig ratlos ...

      1. Hallo memo,

        Wenn ich mir den Quelltext mit Bordmitteln anzeigen lasse, stimmt es, was du sagt: plain!
        Bin jetzt doch ein wenig ratlos ...

        es wird nur der Zahlenwert selbst abgeholt, document() gibt ein Nodeset zurück, welches dann abgefragt werden kann. Eine XML-Rückgabe ist bei random.org offenbar nicht vorgesehen.

        Eine Alternative wäre die Nutzung von unparsed-text() aus XSLT / XPath 2.0, was aber im Browser nicht funktioniert. Falls eine andere Sprache wie PHP auf dem eigenen Server verfügbar ist, dann erzeuge damit die Zufallszahl und liefere an die Transformation ein XML-Snippet zurück:

        zufall.php:

        <?php  
          header("Content-Type: application/xml; charset=UTF-8");  
          echo "<zahl>" . mt_rand(1,200) . "</zahl>";  
        ?>
        

        test.xml:

        <?xml version="1.0" encoding="UTF-8"?>  
        <?xml-stylesheet href="test.xsl" type="text/xsl"?>  
        <test/>
        

        test.xsl:

        <?xml version="1.0" encoding="UTF-8"?>  
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
          <xsl:template match="test">  
            <out>Zufallszahl: <xsl:value-of select="document('http://localhost/zufall.php')/zahl"/>  
            </out>  
          </xsl:template>  
        </xsl:stylesheet>
        

        Offenbar spielt hier nur der IE mit. Insofern nochmal mit EXSLT beschäftigen oder die Transformation über JS laufen lassen.

        Grüße,
        Thomas