0

我的考试答案正确吗?

给定输入 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,输出应如下所示: Karlsruhe: 26.54 Freiburg: 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"/>

4

1 回答 1

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>
于 2013-02-06T12:22:03.823 回答