XML/rss File hat im Child HTML - wie lese ich das aus?
Tekknotrip
- xsl
Hallo Leute,
kein Tag ohne ein Problem :-D Besonders bei XSL...
Also...habe folgenden Code in XML
________________________________________
content:encoded
<h4><a href="http://www.rssweather.com/hw3.php?icao=EDDS"><img src="http://www.rssweather.com/images/fcicons/mcloudy.gif" alt="mostly cloudy" class="icon" width="55" height="58" id="mcloudy.gif" border="0"/></a><span class="sky">Mostly cloudy</span> <span class="temp">18°C</span></h4><dl style="display: inline;">
<dt style="display: inline; font-weight: bold;">Humidity:</dt><dd id="humidity" style="display: inline;">55%</dd>
<dt style="display: inline; font-weight: bold;">Wind Speed:</dt><dd id="windspeed" style="display: inline;">27 KMH</dd>
<dt style="display: inline; font-weight: bold;">Wind Direction:</dt><dd id="winddir" style="display: inline;">SW (230°)</dd>
<dt style="display: inline; font-weight: bold;">Barometer:</dt><dd id="pressure" style="display: inline;"> 1014 mb</dd>
<dt style="display: inline; font-weight: bold;">Dewpoint:</dt><dd id="dewpoint" style="display: inline;">9°C</dd>
<dt style="display: inline; font-weight: bold;">Heat Index:</dt><dd id="heatindex" style="display: inline;">18°C</dd>
<dt style="display: inline; font-weight: bold;">Wind Chill:</dt><dd id="windchill" style="display: inline;">17°C</dd>
<dt style="display: inline; font-weight: bold;">Visibility:</dt><dd id="visibility" style="display: inline;">11 km</dd></dl>
</content:encoded>
__________________________________________
Wie komme ich da nun z.B. an den Wert von "Humidity" ran?
Das klappt irgendwie nicht:
<xsl:value-of select="content:encoded/dl/dd[@id='humidity']"/>
an Content:encoded komme ich ran, kann aber nicht mehr tiefer gehen
Über Antworten würde ich mich freuen,
Gruss, Micha
Hallo,
Wie komme ich da nun z.B. an den Wert von "Humidity" ran?
Das klappt irgendwie nicht:
<xsl:value-of select="content:encoded/dl/dd[@id='humidity']"/>
Das ist an sich richtig, aber es hängt davon ab _wo_ du diese value-of aufrufst.
Das select="content:encoded/dl/dd[@id='humidity']" ist ein relativer Pfad, d.h. es wird vom Kontextknoten ausgehend selektiert.
Beispiele:
wenn du in einem Template <xsl:template match="content:encoded"> bist sucht dein value-of so:
{da bist du jetzt: [content:encoded] /}content:encoded/dl/dd[@id='humidity'] in Elementen ausgedrückt: {da bis du jetzt:content:encoded/}content:encoded/<dl>/<dd> und dieser Pfad gibt es nicht.
Die anderen Möglichkeit du hast ein <![CDATA[ ]]> in deinem content:encoded stehen (so wie es im original XML der Fall ist).
Für eine ausführlichere Hilfe muss du mehr von deinem XSL preisgeben.
Grüße
Thomas
Guten Morgen,
der Kollege Thomas Meinike hat mir schon eine Lösung präsentiert...die erste Wahrscheinlichkeit trifft niocht zu, war schon im richtigen Pfad, also ich konnte selbst das content:encoded noch auslesen....aber nicht mehr weiter
danke!
gruss, Micha
Hallo,
Wie komme ich da nun z.B. an den Wert von "Humidity" ran?
Das klappt irgendwie nicht:
<xsl:value-of select="content:encoded/dl/dd[@id='humidity']"/>an Content:encoded komme ich ran, kann aber nicht mehr tiefer gehen
Der Inhalt von content:encoded ist ein CDATA-Abschnitt, der fuer XPath nicht direkt zugaenglich ist. Man kann nur den gesamten Textknoten abfragen und muss dann Zeichenkettenfunktionen anwenden. Vom Ansatz her funktioniert es so:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
exclude-result-prefixes="content">
<xsl:output
method="html"
doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
doctype-system="http://www.w3.org/TR/html401/loose.dtd"
encoding="ISO-8859-1"
version="4.01"/>
<xsl:template match="/">
<html>
<head>
<title>RSS-Weather-Test</title>
</head>
<body>
xsl:apply-templates/
</body>
</html>
</xsl:template>
<xsl:template match="/rss/channel">
<xsl:apply-templates select="item//content:encoded"/>
</xsl:template>
<xsl:template match="content:encoded">
<xsl:variable name="temp" select="substring-after(text(),'id="humidity" style="display: inline;">')"/>
<xsl:variable name="humidity" select="substring-before($temp,'</dd>')"/>
<p>Humidity: <xsl:value-of select="$humidity"/></p>
</xsl:template>
</xsl:stylesheet>
Ergebnis:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>RSS-Weather-Test</title>
</head>
<body><p>Humidity: 55%</p></body>
</html>
MfG, Thomas
Hey....danke :-)))
der fuer XPath nicht direkt zugaenglich ist.
Das muss man wissen!