XSLT条件测试

时间:2013-02-06 12:01:19

标签: xml xslt conditional

我的考试答案是否正确?

给定输入XML:

<weather> 

<date>2011-07-14T8:00</date> 

<region sky="sunny">

 <name>Karlsruhe</name>
 <temperature>26.54</temperature>

</region>

<region sky="rainy">
  <name>Stuttgart</name> 
  <temperature>12.54</temperature>

</region>

<region sky="sunny">
   <name>Freiburg</name>
   <temperature>40</temperature> 

 </region>
 </weather>

需要:

e)XSLT(20分) 编写一个XSL转换,接收给定的XML作为输入,并输出文本,其中包含温度至少为24摄氏度的所有区域名称。对于上面的XML,输出应如下所示: 卡尔斯鲁厄:26.54 弗赖堡:24.21

我的回答我不知道是否正确:

<?xml version="1.0" ?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <output method="text"/>
 <xsl:template match="/">


  <xsl:for-each select="weather/region">
  <xsl:if test="temperature>30">

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

  </xsl:if>
  </xsl:for-each>

 </xsl:template>
 </xsl:stylesheet>

我不确定是否应该使用

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

或       <apply-template select="name"/> : <apply-template select="temperature"/>

1 个答案:

答案 0 :(得分:0)

看起来没问题,只是output元素需要其名称空间前缀:

<xsl:output method="text"/>

并且指示说“至少24度”,所以这将是:

<xsl:if test="temperature >= 24">

为了正确输出值,我建议使用concat()

<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
  <xsl:for-each select="weather/region">
    <xsl:if test="temperature >= 24">
      <xsl:value-of select="concat(name, ': ', temperature, ' ')"/>
    </xsl:if>
  </xsl:for-each>

 </xsl:template>
</xsl:stylesheet>

稍微好一点的方法是使用模板和XPath选择来评估条件,但我不确定这是否超出了你的课程范围:

<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
  <xsl:apply-templates select="weather/region[temperature >= 24]" />
 </xsl:template>

 <xsl:template match="region">
   <xsl:value-of select="concat(name, ': ', temperature, ' ')" />
 </xsl:template>
</xsl:stylesheet>