在文档中使用<xsl:when =“”>和<xsl:choose> </xsl:choose> </xsl:>

时间:2015-02-08 15:18:50

标签: xml xslt

如果不是从头开始,我对XML很新,并且道歉。

以下是我的代码,它似乎不起作用。我想我知道为什么。我试图设置它,以便如果有一个shipID,那么发货地址应显示在表/ div上,但如果有一个联系号码,则应该显示。我认为它可能与'shipID'有关,因为它被称为'小于',但我已经制作了ShipID文本而不是数字。有没有办法基本上说“如果有一个shipID然后显示这个”而不是必须'如果有一个小于的船号?'

干杯。

    <tr style= "color:white; background:yellow;">
            <th> header 1</th>
            <th> header 2</th>
            <th> header 3</th>
      </tr>
        <xsl:for-each select="shipping">
          <xsl:choose>
            <xsl:when test="shipID &lt; '2'">
              <tr style="color:black;">
                <td>
                  <xsl:value-of select="header 1"/>
                </td>
                <td>
                  <xsl:value-of select="header 2"/>
                </td>
                <td>
                  <xsl:value-of select="header 3"/>
                </td>
                                  </tr>
            </xsl:when>

             <tr style= "color:white; background:yellow;">
            <th> contact 1</th>
            <th> contact 2</th>
            <th> contact 3</th>
      </tr> <xsl:otherwise>
      <xsl:for-each select="contacts">
        <tr style="color:black;">
          <td>
            <xsl:value-of select="contact1"/>
          </td>
          <td>
            <xsl:value-of select="Contact2"/>
          </td>
          <td>
            <xsl:value-of select="Contact3"/>
          </td>
        </tr>
      </xsl:for-each>
    </xsl:otherwise>
    </xsl:choose>

2 个答案:

答案 0 :(得分:1)

  

有没有办法基本上说&#34;如果有一个shipID,那么显示这个&#34;

当然有:

<xsl:when test="shipID">
    <!-- some code -->
</xsl:when>
当元素some code作为当前节点(在您的示例中为shipID)的子元素存在时,

将应用shipping。请注意&#34;存在&#34;只是意味着,而不是它必然具有价值。

答案 1 :(得分:1)

XSLT的默认行为是单独导航XML,因此很少需要使用for-each显式编写循环。

如果没有看到其余的XML和代码,就无法提供完整的解决方案,我也不会想要,因为我试图鼓励您以不同的方式思考XSLT。

如果您想为每个shipID发生某些事情,并且每个联系人都会发生其他事情,那么在没有进一步信息的情况下,最直接的事情就是编写一个模板规则,当输入树中遇到这些节点时将触发该规则。像这样

<xsl:template match="shipID">
  ..do the shipID stuff
</xsl:template>

<xsl:template match="contacts">
  ..do the contacts stuff
</xsl:template>

如果您将模板应用于其父级或允许默认XSLT处理来处理其父级,那么这些规则将触发(如果需要)。

如果您花时间了解内置的默认规则所做的事情,那么XSLT很容易编程,因为您最终还没有重新实现为您做的事情。在学习这些课程的过程中,您可能需要了解apply-templates的用途,但学习这两个概念将使您对XSLT所需的大部分内容相对无足轻重。