-1

指定された XML:

<?xml version="1.0" encoding="UTF-8"?> 
    <sensor-system>
     <velocity>120.00</velocity>    <!-- km/h --> 

     <temperature location="inside">24.6</temperature> 
     <temperature location="outside">-12.5</temperature> 

     <seats>

       <seat location="front">
               <id>1</id> 
                <temperature>32.5</temperature>
               <heating-is-on/>

       </seat>

       <seat location="back">
               <id>2</id>
                <temperature>23.5</temperature> 
        </seat>

     </seats>
   </sensor-system>

必須 :

d) XSLT (25 ポイント) 指定された XML を入力として受け取る XSL 変換を記述し、対応する座席の温度が室内温度よりも低く、暖房がオフになっているすべての座席 ID 番号を含むテキストを出力します。指定された XML の出力は次のようになります。 ヒーターがオフになっているコールド シート: 2 (23.5) 最初の数字はシート ID、2 番目の数字はシートの温度です。

私の答えを確認してください:


   <xsl:output method="text"/>

     <xsl:template match="/">
         <xsl:for-each select="/sensor-system/seats/seat/temperature">
             <xsl:if  test="(temperature < /sesnsor-system/temperature[@location="inside"]) | not(/sensor-system/seats/seat/heating-is-on)" >

                <xsl:value-of select="concat('cold seats with heating switched of : ' , '',/sensor-system/seats/seat/id,'(,/sensor-system/seats/seat/temperature,')')/>

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

2 に答える 2

1

あなたの試みの主なバグは次のとおりです。

  • 温度を反復しtemperature、そのコンテキストから参照する
  • <の代わりに使用&lt;
  • スペルミスsensor-system
  • 二重引用符内での二重引用符の使用
  • |の代わりに使用and
  • heating-is-onid、およびtemperatureに相対パスの代わりに絶対パスを使用する
  • (の後に終了アポストロフィがありませんvalue-of
  • の最後に締めの引用符がありませんvalue-of

for-eachとを使用してこれを行う方法は次のifとおりです。

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

  <xsl:template match="/">
    <xsl:variable name="insideTemp" 
                  select="/sensor-system/temperature[@location='inside']" />

    <xsl:text>cold seats with heating switched off: </xsl:text>

    <xsl:for-each select="/sensor-system/seats/seat">
      <xsl:if  test="temperature &lt; $insideTemp and not(heating-is-on)" >
        <xsl:value-of select="concat(id, ' (', temperature, ') ')" />
      </xsl:if>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

に述語がある場合for-each:

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

  <xsl:template match="/">
    <xsl:variable name="insideTemp"
                  select="/sensor-system/temperature[@location='inside']" />

    <xsl:text>cold seats with heating switched off: </xsl:text>

    <xsl:for-each select="/sensor-system/seats/seat[temperature &lt; $insideTemp and 
                                                       not(heating-is-on)]">
      <xsl:value-of select="concat(id, ' (', temperature, ') ')" />
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

テンプレートを使用:

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

  <xsl:template match="/">
    <xsl:variable name="insideTemp" 
                  select="/sensor-system/temperature[@location='inside']" />

    <xsl:text>cold seats with heating switched off: </xsl:text>

    <xsl:apply-templates select="/sensor-system/seats/seat
                         [temperature &lt; $insideTemp and not(heating-is-on)]" />
  </xsl:template>

  <xsl:template match="seat">
    <xsl:value-of select="concat(id, ' (', temperature, ') ')" />
  </xsl:template>
</xsl:stylesheet>
于 2013-02-06T16:11:22.107 に答える
0
<?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="text"/>

 <xsl:template match="/">

  <xsl:for-each select="/sensor-system/seats/seat">

   <xsl:if test="temperature &lt; /sensor-system/temperature[@location='inside'] or not(heating-is-on) " >
    <xsl:text>cold seats with heating switched of : </xsl:text>
    <xsl:value-of select="id"/> <xsl:text> </xsl:text>
    <xsl:value-of select="temperature"/>
    <xsl:text> 
</xsl:text>
   </xsl:if>
   </xsl:for-each>
 </xsl:template>

</xsl:stylesheet>
于 2013-02-06T17:08:45.690 に答える