Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Daten aus XML mittels XSL anzeigen => funzt nicht... (https://www.delphipraxis.net/90418-daten-aus-xml-mittels-xsl-anzeigen-%3D-funzt-nicht.html)

torud 17. Apr 2007 10:15


Daten aus XML mittels XSL anzeigen => funzt nicht...
 
Hallo Wissende,

ich habe mal wieder eine Frage zu XML. Und zwar habe ich einen Exteren XML-Code erhalten, den ich mittel XSL anzeigen muss. Den Inhalt habe ich jetzt mal testhalber versucht so anzuzeigen, aber es tut sich einfach nichts. Es wird nichts angezeigt.

Ist das der falsche Weg???

Hier der XML-Code:
Delphi-Quellcode:
<MatchStats id="MS036" matchid="ATP20070410MS036" seq="134" state="P" tim="2007-04-17T09:10:21Z" msg="2nd serve" score="6/3 3/0" points="30-0" rnd="1" dbl="1" crt="1" nset="3" stype="1" umpire="STEINER" fin="0" nA="D. FERRER" nB="G. SIMON" idA="F401" idB="SD32" cA="ESP" cB="FRA" mt="00:57:26" s1A="6" s1B="3" s2A="3" s2B="0" s3A="" s3B="" s4A="" s4B="" s5A="" s5B="" ballA="" ballB="1" sA="1" sB="0" ptA="30" ptB=" 0" tb1="" tb2="" tb3="" tb4="" tb5=""/>
Und hier mein Versuch aus der XSL:
Delphi-Quellcode:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <html>
 <head>
  <link rel="stylesheet" href="index.css" type="text/css" />
 </head>

 <body onselectstart="return false" onDragStart="return false" onDrop="return false">
 

<xsl:value-of select="matchid" /></p>
 

<xsl:value-of select="msg" /></p>
  usw.
Ich würde mich wirklich freuen, wenn mir jemand nen Tipp geben könnte, wie ich das lösen kann, oder mir schreibt, was ich da falsch mache.

marabu 17. Apr 2007 10:31

Re: Daten aus XML mittels XSL anzeigen => funzt nicht...
 
Hallo Tom,

du willst auf Attribut-Werte zugreifen - probiere es mal so:

XML-Code:


 <xsl:value-of select="@matchid" /> </p>
Freundliche Grüße

torud 17. Apr 2007 17:27

Re: Daten aus XML mittels XSL anzeigen => funzt nicht...
 
Hm, ich weiss, dass das jetzt vielleicht nicht zu erwarten war, aber es geht einfach nicht.

Hier mal zur Sicherheit den gesamten Inhalt der XSL. Wess nicht, ob das hilft, aber ich erhalte zumindest keine Fehlermeldung vom IE. Ich habe noch nicht überall das @ eingefügt. Vielleicht ist das das Problem, aber es wird eben gar kein Inhalt angezeigt.

Delphi-Quellcode:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <html>
 <head>
  <link rel="stylesheet" href="index.css" type="text/css" />
 </head>

 <body onselectstart="return false" onDragStart="return false" onDrop="return false">



<xsl:value-of select="@matchid" /></p>


<xsl:value-of select="@msg" /></p>


<table class="match" cellpadding="0" cellspacing="0" align="center" width="100%">
  <tr valign="middle">
    <th width="200px" class="left" id="crt"><xsl:value-of select="@crt" /></th>
    <th width="50px" class="center" id="mt"><xsl:value-of select="@mt" /></th>
    <th width="50px" class="center">Serv.</th>
    <th class="center">Game</th>
    <th class="center">Set1</th>
    <th class="center">Set2</th>
    <th class="center">Set3</th>
  <xsl:if test="@m_max_sets='5'">
    <th class="center">Set4</th>
    <th class="center">Set5</th>
  </xsl:if>
  </tr>
  <tr valign="middle">
    <td class="p1" colspan="2" style="text-align:left;padding-left:5px;" id="player_a">
     <xsl:value-of select="@nA" />
     <xsl:if test="dbl='2'">
     
<xsl:value-of select="player_a2" />
     </xsl:if>
    </td>
    <td class="p1" id="serv_a">[img]{ballA}.gif[/img]</td>
    <td class="p1" id="pts_a"><xsl:value-of select="@ptA" /></td>
    <td class="p1" id="s1A"><xsl:value-of select="set_1a" /></td>
    <td class="p1" id="s2A"><xsl:value-of select="set_2a" /></td>
    <td class="p1" id="s3A"><xsl:value-of select="set_3a" /></td>
  <xsl:if test="@nset='5'">
    <td class="p1" id="s4A"><xsl:value-of select="set_4a" /></td>
    <td class="p1" id="s5A"><xsl:value-of select="set_5a" /></td>
  </xsl:if>
  </tr>
  <tr valign="middle">
    <td class="p2" colspan="2" style="text-align:left;padding-left:5px;" id="player_b">
     <xsl:value-of select="nB" />
     <xsl:if test="dbl='2'">
     
<xsl:value-of select="player_b2" />
     </xsl:if>
    </td>
    <td class="p2" id="serv_b">[img]{ballB}.gif[/img]</td>
    <td class="p2" id="pts_b"><xsl:value-of select="ptB" /></td>
    <td class="p2" id="set_1b"><xsl:value-of select="set_1b" /></td>
    <td class="p2" id="set_2b"><xsl:value-of select="set_2b" /></td>
    <td class="p2" id="set_3b"><xsl:value-of select="set_3b" /></td>
  <xsl:if test="nset='5'">
    <td class="p2" id="set_4b"><xsl:value-of select="set_4b" /></td>
    <td class="p2" id="set_5b"><xsl:value-of select="set_5b" /></td>
  </xsl:if>
  </tr>
</table>








<table class="match" cellpadding="0" cellspacing="0" align="center" width="100%">
  <tr valign="middle">
    <th class="right" height="29" id="playernameA" width="37%">[img]flags/{nA}.gif[/img]
     <xsl:value-of select="nA" />
     
     <xsl:if test="matchtyp='D'">
      <br style="clear:both;" />[img]flags/{nat_a2}.gif[/img]<xsl:value-of select="player_a2" />
     </xsl:if>

    </th>
    <th class="center" height="29" width="25%">-</th>
    <th class="left"  height="29" id="playernameB" width="38%">[img]flags/{nB}.gif[/img]
     <xsl:value-of select="nB" />

     <xsl:if test="matchtyp='D'">
      <br style="clear:both;" />[img]flags/{nat_b2}.gif[/img]<xsl:value-of select="player_b2" />
     </xsl:if>
   </th>
  </tr>
  <tr valign="middle">
    <td class="players" height="29" align="right" id="sv1aa"><xsl:value-of select="fsA" /> %</td>
    <td class="players" height="29" align="center">1st serv Percantage</td>
    <td class="players" height="29" align="left" id="sv1ab"><xsl:value-of select="fsB" /> %</td>
  </tr>
  <tr valign="middle">
    <td class="players" height="29" align="right" id="psv1aa"><xsl:value-of select="fspA" /> %</td>
    <td class="players" height="29" align="center">1st serv Points</td>
    <td class="players" height="29" align="left" id="psv1ab"><xsl:value-of select="fspB" /> %</td>
  </tr>
  <tr valign="middle">
    <td class="players" height="29" align="right" id="psv2aa"><xsl:value-of select="sspA" /> %</td>
    <td class="players" height="29" align="center">2nd serv Points</td>
    <td class="players" height="29" align="left" id="psv2ab"><xsl:value-of select="sspB" /> %</td>
  </tr>
  <tr valign="middle">
    <td class="players" height="29" align="right" id="asse_a"><xsl:value-of select="aceA" /></td>
    <td class="players" height="29" align="center">Aces on first serve</td>
    <td class="players" height="29" align="left" id="asse_b"><xsl:value-of select="aceB" /></td>
  </tr>
  <tr valign="middle">
    <td class="players" height="29" align="right" id="asse_a"><xsl:value-of select="assA" /></td>
    <td class="players" height="29" align="center">Aces on second serve</td>
    <td class="players" height="29" align="left" id="asse_b"><xsl:value-of select="assB" /></td>
  </tr>
  <tr valign="middle">
    <td class="players" height="29" align="right" id="dbfa"><xsl:value-of select="dfA" /></td>
    <td class="players" height="29" align="center">Double faults</td>
    <td class="players" height="29" align="left" id="dbfa"><xsl:value-of select="dfB" /></td>
  </tr>
  <tr valign="middle">
    <td class="players" height="30" align="right" id="ptsa"><xsl:value-of select="tpA" /></td>
    <td class="players" height="30" align="center">Points total</td>
    <td class="players" height="30" align="left" id="ptsb"><xsl:value-of select="tpB" /></td>
  </tr>
  <tr valign="middle">
    <td class="players" height="29" align="right" id="bpA"><xsl:value-of select="bpaa" /> / <xsl:value-of select="bpeffa" /> %</td>
    <td class="players" height="29" align="center">Breakballs</td>
    <td class="players" height="29" align="left" id="bpB"><xsl:value-of select="bpab" /> / <xsl:value-of select="bpeffb" /> %</td>
  </tr>
</table>









<table class="match" cellpadding="0" cellspacing="0" align="center" width="100%" height="35">
  <tr valign="middle">
    <td class="umpire">Chair Umpire:
     <xsl:value-of select="r_fname" /><xsl:value-of select="umpire" /> [<xsl:value-of select="r_nat" />]
    </td>
  </tr>
</table>









<table class="match" cellpadding="0" cellspacing="0" align="center" width="100%" height="35">
  <tr valign="middle">
    <th class="center" id="tag" width="50%"><xsl:value-of select="date" /></th>
    <th class="center" id="start" width="50%"><xsl:value-of select="round" /></th>
  </tr>
</table>

 </body>
 </html>
 </xsl:template>

</xsl:stylesheet>

MathiasSimmack 17. Apr 2007 17:30

Re: Daten aus XML mittels XSL anzeigen => funzt nicht...
 
Boah, ist das ein Durcheinander. Kannst du nicht lieber mal XML und XSL als Dateien anhängen?

torud 17. Apr 2007 17:34

Re: Daten aus XML mittels XSL anzeigen => funzt nicht...
 
Ich werden den Code jetzt einfach mal komplett einkürzen, um die Disfunktionalität aufzuzeigen. Das ist für alle einfacher und erfordert dann auch keinen Download.

XML-Inhalt
Delphi-Quellcode:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="ls.xsl" ?>
<?xml-stylesheet type="text/css" href="index.css" ?>
<MatchStats id="MD030" matchid="ATP20070410MD030" seq="58" state="P" tim="2007-04-17T16:36:12Z" msg="2nd serve" score="3/3" points="0-0" rnd="1" dbl="2" crt="3" nset="3" stype="9" umpire="BERNARDES" fin="0" nA="BHUPATHI / STEPANEK" nB="CLEMENT / LLODRA" idA="B471" idB="C487" idAp="S694" idBp="L428" cA="IND" cB="FRA" cAp="CZE" cBp="FRA" mt="00:20:45" s1A="3" s1B="3" s2A="" s2B="" s3A="" s3B="" s4A="" s4B="" s5A="" s5B="" ballA="" ballB="1" sA="0" sB="0" ptA=" 0" ptB=" 0" tb1="" tb2="" tb3="" tb4="" tb5=""/>
XSL-Inhalt
Delphi-Quellcode:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
 <html>
 <head>
  <link rel="stylesheet" href="index.css" type="text/css" />
 </head>
 <body onselectstart="return false" onDragStart="return false" onDrop="return false">
 

<xsl:value-of select="@matchid" /></p>
 

<xsl:value-of select="@msg" /></p>
 </body>
 </html>
 </xsl:template>
</xsl:stylesheet>

MathiasSimmack 17. Apr 2007 19:46

Re: Daten aus XML mittels XSL anzeigen => funzt nicht...
 
Es funktioniert, wenn du den Slash entfernst
Zitat:

Zitat von torud
XML-Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
 
</xsl:template>
</xsl:stylesheet>

und stattdessen den Knotennamen MatchStats einträgst. Frag mich aber nicht nach dem Grund. Der Slash sollte normalerweise auch funktionieren. :?

torud 18. Apr 2007 06:21

Re: Daten aus XML mittels XSL anzeigen => funzt nicht...
 
Jo das war es. Danke. Auf diese Art und Weise habe ich auch noch keine Daten mit XSL dargestellt. Nun weiss ich wieder etwas mehr. Dank Euch beiden.

marabu 18. Apr 2007 06:33

Re: Daten aus XML mittels XSL anzeigen => funzt nicht...
 
Hallo,

über das slash pattern wird document root ausgewählt und nicht document element. Üblicherweise wird beim match="/" nur der HTML-Rahmen generiert:

XML-Code:
<xsl:template match="/">
   <html>
      <head>
         <link rel="stylesheet" href="index.css" type="text/css" />
      </head>
      <body onselectstart="return false" onDragStart="return false" onDrop="return false">
         <xsl:apply-templates select="*"/>
      </body>
   </html>
</xsl:template>

<xsl:template match="MatchStats">
   

<xsl:value-of select="@matchid" /></p>
   

<xsl:value-of select="@msg" /></p>
</xsl:template>
Da es sich hier aber um kein typisches XML-Dokument handelt, ist auch ein einziges template mit match="/*" oder "MatchStats" (wie Mathias geschrieben hat) okay.

Freundliche Grüße

torud 18. Apr 2007 10:10

Re: Daten aus XML mittels XSL anzeigen => funzt nicht...
 
Danke für das nochmalige Feedback. Ich bin mir nicht sicher, ob ich diese Frage hier noch stellen darf, aber ich müsste in meiner Applikation auch herausfiltern, welche matchid der eingehende XML-String hat. In dem Falle wäre der Wert der matchid = ATP20070410MD030.

Delphi-Quellcode:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="ls.xsl" ?>
<?xml-stylesheet type="text/css" href="index.css" ?>
<MatchStats id="MD030" matchid="ATP20070410MD030" seq="58" state="P" tim="2007-04-17T16:36:12Z" msg="2nd serve" score="3/3" points="0-0" rnd="1" dbl="2" crt="3" nset="3" stype="9" umpire="BERNARDES" fin="0" nA="BHUPATHI / STEPANEK" nB="CLEMENT / LLODRA" idA="B471" idB="C487" idAp="S694" idBp="L428" cA="IND" cB="FRA" cAp="CZE" cBp="FRA" mt="00:20:45" s1A="3" s1B="3" s2A="" s2B="" s3A="" s3B="" s4A="" s4B="" s5A="" s5B="" ballA="" ballB="1" sA="0" sB="0" ptA=" 0" ptB=" 0" tb1="" tb2="" tb3="" tb4="" tb5=""/>
Wie könnte ich das noch lösen? Gibt es da eine einfache Möglichkeit, dass ich diese Attribut-Wert mittels Delphi auslesen kann, um damit intern zu "werkeln"? Ich mache auch nen neuen Thread auf, bzw. werde ich nochmal die Hilfe/Suche dazu bedienen.

marabu 18. Apr 2007 10:39

Re: Daten aus XML mittels XSL anzeigen => funzt nicht...
 
Hallo Tom,

versuche es so:

Delphi-Quellcode:
uses
  MSXML2, Variants;

var
  s: string;

begin
  s := VarToStr(doc.documentElement.getAttribute('matchid'));
end;
Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:06 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz