我想创建一个天气应用程序,要使其正常工作,我需要能够从XML文件中获取特定的标签。我已经设法获得一个特定的子节点,但是我似乎无法获得标签。
我的主要目标是获得温度中的标签“ value =“ 4”。
我的XML和XSL文件如下所示:
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="/">
<html>
<head>
<title>Sjekk været</title>
<link rel="stylesheet" type="text/css" href="weather.css"/>
</head>
<body>
<h1>Været og valutaen i Kanada:</h1>
<table>
<tr>
<th>Vær</th>
<th>Norske kroner</th>
<th>Kanadiske dollar</th>
</tr>
<xsl:for-each select="valuta/valutakurs[land='Canada']/overforsel">
<xsl:for-each select="document('http://www.yr.no/sted/Canada/Ontario/Toronto/varsel.xml')/weatherdata/forecast/tabular/time">
<tr>
-------> I want to show the tag in this field<-------
<td><xsl:value-of select="temperature"/></td>
<td>1 NOK</td>
<td><xsl:value-of select="kjop"/> CAD</td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XML:
<weatherdata>
<location>...</location>
<credit>...</credit> <links>...</links>
<meta>...</meta>
<sun rise="2018-10-24T07:43:16" set="2018-10-24T18:19:47"/>
<forecast>
<tabular>
<time from="2018-10-24T07:00:00" to="2018-10-24T12:00:00" period="1">
<!-- Valid from 2018-10-24T07:00:00 to 2018-10-24T12:00:00 -->
<symbol number="3" numberEx="3" name="Delvis skyet" var="03d"/>
<precipitation value="0"/>
<!-- Valid at 2018-10-24T07:00:00 -->
<windDirection deg="317.9" code="NW" name="Nordvest"/>
<windSpeed mps="3.7" name="Lett bris"/>
<temperature unit="celsius" value="4"/>
<pressure unit="hPa" value="1024.5"/> </time>
答案 0 :(得分:1)
要回答您的直接问题,以获取外部文档中的温度值,请执行以下操作:
<xsl:value-of select="temperature/@value"/>
这是因为value
是temperature
元素的“属性”,因此您使用@
前缀来表示属性。
但是,在获取kjop
元素时也会遇到问题,因为在您尝试获取它的时候,您是在外部文档的上下文中,而kjop
是一个元素在原始文件上。因此,您需要做的是在原始文档中保存对元素的引用,以便在开始从外部文档中进行选择时可以再次引用它。
尝试以下代码段:
<xsl:for-each select="valuta/valutakurs[land='Canada']/overforsel">
<xsl:variable name="overforsel" select="." />
<xsl:for-each select="document('http://www.yr.no/sted/Canada/Ontario/Toronto/varsel.xml')/weatherdata/forecast/tabular/time">
<tr>
<td><xsl:value-of select="temperature/@value"/></td>
<td>1 NOK</td>
<td><xsl:value-of select="$overforsel/kjop"/> CAD</td>
</tr>
</xsl:for-each>
</xsl:for-each>