random.org via xsl
memo
- 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&min=1&max=15&col=1&base=10&format=plain&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
Hallo Memo,
Ich versuche nun wie folgt auf die Zahl zuzureifen:
<xsl:variable name="http://www.random.org/integers/?num=1&min=1&max=15&col=1&base=10&format=plain&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&min=1&max=200&col=1&base=10&format=plain&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
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 ?
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
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
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
Hallo,
<xsl:variable name="http://www.random.org/integers/?num=1&min=1&max=15&col=1&base=10&format=plain&rnd=new</xsl:variable>
plain&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
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=newDie 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 foundHat 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
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 ...
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