XSLT字符串比较

时间:2015-08-01 13:50:19

标签: xml xslt

如何比较字符串以使用XSLT创建表?

我有一个像这样的xml:

<Os>
        <O type="xyz">
            <Count>126</Count>
            <Food>Yes</Food>
            <Owner name="Jack">
                <Phone>564815</Phone>
            </Owner>
            <Date>12/12/2014</Date>
        </O>
        <O type="zyx">
            <Count>56</Count>
            <Food>No</Food>
            <Owner name="Phill">
                <Phone>826633</Phone>
            </Owner>
            <Date>09/11/2015</Date>
        </O>
</Os

我想为每个人遍历并添加一行,如果食物=&#39;是&#39;。

  <xsl:for-each select="Os/O">
  <xsl:sort select="Count" data-type="number" />
  <tr>
    <td><xsl:value-of select="@type"/></td>
    <td><xsl:value-of select="Count"/></td>
    <td><xsl:value-of select="Food"/></td>
    <td><xsl:value-of select="Owner/@name"/></td>
    <td><xsl:value-of select="Owner/Phone"/></td>
    <td><xsl:value-of select="Date"/></td>
  </tr>
  </xsl:for-each>

如果我说食物,我想我能做到:1有食物和食物时:0没有食物和食物时0。然后我可以写一个if语句食物&gt; 0但我不想这样做。

提前致谢。

2 个答案:

答案 0 :(得分:0)

  

如果食物='是',请添加一行。

为什么不简单地使用谓词

<xsl:for-each select="Os/O[Food='yes']">
  ...

答案 1 :(得分:0)

以下是<xsl:if>

的使用方法
<?xml version="1.0"?>

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:template match="Os">
    <table>
      <xsl:for-each select="O">
        <xsl:sort select="Count" data-type="number" />
        <xsl:if test="Food='Yes'">
          <tr>
            <td><xsl:value-of select="@type"/></td>
            <td><xsl:value-of select="Count"/></td>
            <td><xsl:value-of select="Food"/></td>
            <td><xsl:value-of select="Owner/@name"/></td>
            <td><xsl:value-of select="Owner/Phone"/></td>
            <td><xsl:value-of select="Date"/></td>
          </tr>
        </xsl:if>
      </xsl:for-each>
    </table>
  </xsl:template>

</xsl:stylesheet>