XML mit XSLT in HTML Ausgeben
Daniel_F
- xsl
0 Thomas J.S.0 Daniel_F0 Thomas J.S.0 Daniel_F0 Daniel_F0 hh0 Daniel_F0 hh0 Daniel_F
0 Thomas J.S.
0 Thomas J.S.
hallo zusammen,
Also ich habe folgendes Problem, ich soll ein Datensätze aus einer SQL Server Datebank diret über ASP.NET in XML format in den Browser schreiben ohne das ich diese Datei speichere, was auch problemlos klappt. Mein Problem ist es nun dieses XML über XSLT als HTML im Browser in einer Tabelle auszugeben und eine Überprüfung zu machen das nur bestimmte Daten in bestimmte Spalten/Reihe reingeschrieben werden dürfen.
Jetzt meine Frage ist dies mit XSLT überhaupt möglich vieleicht mit den xsl:if oder xsl:choose funtkionstüchtig machen?.
Vieleicht kann mir ja einer ein ansatz geben wie ich dies hin bekomme hab grad mit XML etc. angefangen also noch am anfänger.
Gruß Daniel
Hallo,
Also ich habe folgendes Problem,[...] HTML im Browser in einer Tabelle auszugeben und eine Überprüfung zu machen das nur bestimmte Daten in bestimmte Spalten/Reihe reingeschrieben werden dürfen.
Jetzt meine Frage ist dies mit XSLT überhaupt möglich vieleicht mit den xsl:if oder xsl:choose funtkionstüchtig machen?.
Ja, das ist mit XSLT möglich, aber mehr kann man dir erst nur dann sagen, wenn du ein Strück aus deinem XML (es müssen nicht echte Daten sein, aber das Bsp. soll schon so strukturiert sein wie das Original) und von deinem XSLT (oder eine Erklärung wie die gewünsche Ausgabe aussehen soll) uns gibst.
Grüße
Thomas
Hi ok dann weis ich ja schon mal das ich nicht ganz falsch liege :D
also hier ist ein teil der xml datei
<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="XSLTFile.xsl"?>
<NewDataSet>
<Spielzug>
<Spiel_ID>1</Spiel_ID>
<Spalte>1</Spalte>
<Spieler>false</Spieler>
<Reihe>0</Reihe>
</Spielzug>
<Spielzug>
<Spiel_ID>1</Spiel_ID>
<Spalte>1</Spalte>
<Spieler>true</Spieler>
<Reihe>1</Reihe>
</Spielzug>
</NewDataSet>
Also mein Ziel ist es das Attribut Spieler in einer Tabellenspalte auszugeben, diese Tabellenspalte soll dann z.B für Spieler (False)(erster Datensatz) in der Tabellespalte 1 und Reihe 1 drin stehen.
hoffe du verstehst was ich meine
und danke für die schnelle antwort
Gruß Daniel
Hallo,
also hier ist ein teil der xml datei
<?xml version="1.0" standalone="yes"?><?xml-stylesheet type="text/xsl" href="XSLTFile.xsl"?>
<NewDataSet>
<Spielzug>
<Spiel_ID>1</Spiel_ID>
<Spalte>1</Spalte>
<Spieler>false</Spieler>
<Reihe>0</Reihe>
</Spielzug>
<Spielzug>
<Spiel_ID>1</Spiel_ID>
<Spalte>1</Spalte>
<Spieler>true</Spieler>
<Reihe>1</Reihe>
</Spielzug>
</NewDataSet>Also mein Ziel ist es das Attribut Spieler in einer Tabellenspalte auszugeben, diese Tabellenspalte soll dann z.B für Spieler (False)(erster Datensatz) in der Tabellespalte 1 und Reihe 1 drin stehen.
hoffe du verstehst was ich meine
Ich hoffe, dass ich dich jetztrichtig verstanden habe:
------------- xslt-datei ----------------------
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="iso-8859-1" />
<xsl:template match="/">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="NewDataSet">
<table>
<tr>
<th>Spiel-ID</th>
<th>Spieler</th>
</tr>
<xsl:for-each select="Spielzug">
<tr>
<td>
<xsl:value-of select="Spiel_ID" />
</td>
<td>
<xsl:value-of select="Spieler" />
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Grüße
Thomas
Also damit krieg ich den rest auch alleine hin ;D
muss nur noch die Tabelle richtig ordnenen aber vielen danke für deine schnelle hilfe hat mir echt geholfen vielen dank
Gruß Daniel
eins vieleicht noch hab jetzt schon auf mehreren Seiten dannach gesucht und nix gefunden weist du vieleicht ob ich mit dem
xsl:if 2 bedingungen abfragen kann weil das klappt bei mir noch nicht richtig als Beispiel
oben template...
<xsl:if test="Spielzug/Spalte = 103 and Spielzug/Reihe = 1">
rest vom template unwichtig...
ob sowas in der art möglich ist weil so wie das oben steht klappt das bei mir nicht und ich finde auch kein geignetes Beispiel dafür :(
Gruß Daniel
Also mit xsl:if kannst du beliebig viele Bedingungen setzen. Aber du muesstest etwas näher angeben, was du mit der Abfrage erreichen möchtest. Vielleicht einen größeren Auschnitt der xml posten und das gewünschte Ergebnis umschreiben ?
Also mit xsl:if kannst du beliebig viele Bedingungen setzen. Aber du muesstest etwas näher angeben, was du mit der Abfrage erreichen möchtest. Vielleicht einen größeren Auschnitt der xml posten und das gewünschte Ergebnis umschreiben ?
also die werte die im obrigen post stehen müssten glaub ich reichen weil ich versuche nur ein bedinung zu schreiben mit der ich Spieler aus geben will also True oder False aber nur den Spieler mit den Spalten 103 und Reihe 2 z.B und dann funktioniert mit xsl:if nicht aber ich hab irgendwo was gelesen das man das direkt mit xsl:value-of select="Spielzug/Spieler[Spielzug/Spalte = 103 and Spielzug/Reihe = 2]">
so machen kann aber da bekomm ich dann garnichts raus ist alles bissel komisch ;/
wenn oben das nicht reicht kann ich auch grad mehr von der xml datei posten:
XML Datei:
<NewDataSet>
<Spielzug Spiel_ID="1">
<Spalte>103</Spalte>
<Spieler>false</Spieler>
<Reihe>0</Reihe>
</Spielzug>
<Spielzug Spiel_ID="1">
<Spalte>103</Spalte>
<Spieler>true</Spieler>
<Reihe>1</Reihe>
</Spielzug>
<Spielzug Spiel_ID="1">
<Spalte>103</Spalte>
<Spieler>false</Spieler>
<Reihe>2</Reihe>
</Spielzug>
<Spielzug Spiel_ID="1">
<Spalte>104</Spalte>
<Spieler>true</Spieler>
<Reihe>0</Reihe>
</Spielzug>
<Spielzug>
<Spalte>104</Spalte>
<Spieler>false</Spieler>
<Reihe>1</Reihe>
</Spielzug>
<Spielzug Spiel_ID="1">
<Spalte>104</Spalte>
<Spieler>true</Spieler>
<Reihe>2</Reihe>
</Spielzug>
<Spielzug Spiel_ID="1">
<Spalte>104</Spalte>
<Spieler>true</Spieler>
<Reihe>3</Reihe>
</Spielzug>
<Spielzug Spiel_ID="1">
<Spalte>104</Spalte>
<Spieler>false</Spieler>
<Reihe>4</Reihe>
</Spielzug>
<Spielzug Spiel_ID="1">
<Spalte>105</Spalte>
<Spieler>true</Spieler>
<Reihe>0</Reihe>
</Spielzug>
<Spielzug Spiel_ID="1">
<Spalte>105</Spalte>
<Spieler>false</Spieler>
<Reihe>1</Reihe>
</Spielzug>
<Spielzug Spiel_ID="1">
<Spalte>105</Spalte>
<Spieler>true</Spieler>
<Reihe>2</Reihe>
</Spielzug>
<Spielzug Spiel_ID="1">
<Spalte>106</Spalte>
<Spieler>false</Spieler>
<Reihe>0</Reihe>
</Spielzug>
<Spielzug Spiel_ID="1">
<Spalte>106</Spalte>
<Spieler>false</Spieler>
<Reihe>1</Reihe>
</Spielzug>
</NewDataSet>
Hallo
also die werte die im obrigen post stehen müssten glaub ich reichen weil ich versuche nur ein bedinung zu schreiben mit der ich Spieler aus geben will also True oder False aber nur den Spieler mit den Spalten 103 und Reihe 2 z.B und dann funktioniert mit xsl:if nicht aber ich hab irgendwo was gelesen das man das direkt mit xsl:value-of select="Spielzug/Spieler[Spielzug/Spalte = 103 and Spielzug/Reihe = 2]">
Das ist Richtig, viele Wege führen nach Rom ;-) Alternative 1:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="iso-8859-1" />
<xsl:template match="/">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="NewDataSet">
<table>
<tr>
<th>Spiel-ID</th>
<th>Spieler</th>
</tr>
<xsl:for-each select="Spielzug[(descendant::Spalte=103) and (descendant::Reihe=2)]">
<!-- du koenntest auch schreiben <xsl:for-each select="Spielzug[Spalte=103 and Reihe=2]"> -->
<tr>
<td>
<xsl:value-of select="@Spiel_ID" />
</td>
<td>
<xsl:value-of select="Spieler" />
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Alternative 2 mit xsl:if:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="iso-8859-1" />
<xsl:template match="/">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="NewDataSet">
<table>
<tr>
<th>Spiel-ID</th>
<th>Spieler</th>
</tr>
<xsl:for-each select="Spielzug">
<xsl:if test="Spalte = 103 and Reihe = 2">
<tr>
<td>
<xsl:value-of select="@Spiel_ID" />
</td>
<td>
<xsl:value-of select="Spieler" />
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Alternative 1 ist m.E. vorzuziehen, da diese performanter ist.
Gruß,
Holger
Alternative 1 ist m.E. vorzuziehen, da diese performanter ist.
cool danke werde glaub ich auch mit der ersten Alternative weiter machen vielen danke für eure hilfe hat mir echt geholfen :D
Gruß Dani
Hallo,
aber ich hab irgendwo was gelesen das man das direkt mit xsl:value-of select="Spielzug/Spieler[Spielzug/Spalte = 103 and Spielzug/Reihe = 2]">
so machen kann aber da bekomm ich dann garnichts raus
Das ist kein Wunder, wenn du folgendes bedenkst:
<xsl:value-of select="Spielzug/Spieler[Spielzug/Spalte = 103 and Spielzug/Reihe = 2]">
Du greifst auf ein Spieler-Elemente, wenn es selbst ein Spielzeug-Element, dessen Spalte-Element 103 bzw. dessen Reihe-Element 2 ist, enthält, in einem Spielzeug-Element.
In XML:
<Spielzug>
<Spieler>
<Spielzug>
<Spalte>
<Reihe>
--------------
Die Lösungen hat dir schon "hh" gepostet.
Grüße
Thomas
Hallo,
eins vieleicht noch hab jetzt schon auf mehreren Seiten dannach gesucht und nix gefunden weist du vieleicht ob ich mit dem
xsl:if 2 bedingungen abfragen kann weil das klappt bei mir noch nicht richtig als Beispieloben template...
<xsl:if test="Spielzug/Spalte = 103 and Spielzug/Reihe = 1">
Ja das kannst du genau so machen, wobei es z.B. ein:
<xsl:if test="(Spielzug/Spalte = 103) and (Spielzug/Reihe = 1)"> etwas schöner wäre.
Aber es kommt darau an wo du diese Abfrage stellt, sprich ob "Spielzug/Spalte" wirklich der richtige Pfad ist.
Grüße
Thomas