如果不是从头开始,我对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 < '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>
答案 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所需的大部分内容相对无足轻重。