在XSL中从XML文档获取标签

时间:2018-10-24 10:48:56

标签: xml xslt

我想创建一个天气应用程序,要使其正常工作,我需要能够从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>

1 个答案:

答案 0 :(得分:1)

要回答您的直接问题,以获取外部文档中的温度值,请执行以下操作:

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

这是因为valuetemperature元素的“属性”,因此您使用@前缀来表示属性。

但是,在获取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>