1

XML と XSL に関する質問 (sharepoint 2007 を使用しています)

2 つのノードをどのように比較しますか?

以下の例では、'promotionprice' と 'price' を比較します。

「promotionprice」が「price」以上の場合、「OK」は「NO」にする必要があります。「promotionprice」が「price」よりも小さい場合、「OK」は「YES」である必要があります。

sharepoint では機能せず、常に YES となるため、正しい構文を使用しているかどうかわかりません。

XML example:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<catalog>
<cd>
<title>Empire Burlesque</title> 
<artist>Bob Dylan</artist> 
<country>USA</country> 
<company>Columbia</company> 
<price>10.90</price>
<promotionprice>15.00</promotionprice>
<year>1985</year> 
<OK>Yes</OK>
</cd>
<cd>
<title>Hide your heart</title> 
<artist>Bonnie Tyler</artist> 
<country>UK</country> 
<company>CBS Records</company> 
<price>9.90</price> 
<promotionprice>5.00</promotionprice>
<year>1988</year> 
<OK>Yes</OK>
</cd>
</catalog>


XSL example:
...
<!-- title node -->
<td>
<xsl:value-of select="@title"/>
</td>
<!-- artist node -->
<td>
<xsl:value-of select="@artist"/>
</td>
...
<!-- OK node -->
<td>
<xsl:choose>
<xsl:when test="promotionprice &gt;= price">
<xsl:value-of select="'NO'"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'YES'"/>
</xsl:otherwise>
</xsl:choose>
</td>

WANTED RESULT:
<table border="1">
<tr>
  <td>Empire Burlesque</td>
  <td>Bob Dylan</td>
  <td>USA</td>
  <td>Columbia</td>
  <td>10.90</td>
  <td>15.00</td>
  <td>1985</td>
  <td>NO</td>
</tr>
<tr>
  <td>Hide your heart</td>
  <td>Bonnie Tyler</td>
  <td>UK</td>
  <td>CBS Records</td>
  <td>9.90</td>
  <td>5.00</td>
  <td>1988</td>
  <td>YES</td>
</tr>
</table>

事前にたくさんありがとう!

4

1 に答える 1

1

この変換:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
     <table border="1">
      <xsl:apply-templates/>
     </table>
 </xsl:template>

 <xsl:template match="cd">
   <tr><xsl:apply-templates/></tr>
 </xsl:template>

 <xsl:template match="title|artist">
  <td><xsl:value-of select="."/></td>
 </xsl:template>

 <xsl:template match="OK">
  <td>
   <xsl:value-of select=
    "substring('YESNO', 4 -3*(../price >= ../promotionprice),3)"/>
  </td>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<catalog>
    <cd>
        <title>Empire Burlesque</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <promotionprice>15.00</promotionprice>
        <year>1985</year>
        <OK>Yes</OK>
    </cd>
    <cd>
        <title>Hide your heart</title>
        <artist>Bonnie Tyler</artist>
        <country>UK</country>
        <company>CBS Records</company>
        <price>9.90</price>
        <promotionprice>5.00</promotionprice>
        <year>1988</year>
        <OK>Yes</OK>
    </cd>
</catalog>

私が推測する結果は、望ましい結果です。

<table border="1">
   <tr>
      <td>Empire Burlesque</td>
      <td>Bob Dylan</td>
      <td>NO</td>
   </tr>
   <tr>
      <td>Hide your heart</td>
      <td>Bonnie Tyler</td>
      <td>YES</td>
   </tr>
</table>
于 2012-11-09T14:03:31.207 に答える