XML If和Whens?

时间:2012-04-24 15:56:16

标签: xml xslt if-statement conditional

我需要创建一个利用IF和WHEN的XML / XSLT文档。我熟悉PHP中的这些语句(尽管if / else),但不熟悉XML / XSLT。

例如我有一个产品,该产品有2个名字的可能性: 1)层压名片 2)名片

如果它是选项1,那么我需要获得该订单的自定义选项的值并按如下方式回显:

<xsl:choose>
<xsl:when test="custom_options/option[name='Lamination Options (Your printing looks great     unlaminated, if you wish you can add gloss or matt lamination below)']/value='Matt Lamination (Both sides)'">
<Extrinsic name="Laminating?">Matt Lam DS SRA3</Extrinsic>
</xsl:when>
<xsl:when test="custom_options/option[name='Lamination Options (Your printing looks great unlaminated, if you wish you can add gloss or matt lamination below)']/value='Gloss Lamination  (Both sides)'">
<Extrinsic name="Laminating?">Gloss Lam DS SRA3</Extrinsic>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>

所以我需要检查产品的名称,如果它包含层压层,然后运行另一个if语句,如果没有运行不同的if语句,那么如果它是PHP,它将如下所示:

<?php $product = "Laminated Business Cards";
if(strpos($product,'Laminated')){
    if(value of custom option == 'Matt Laminated'){
        echo "Matt Lam";
    } elseif(value of custom option == 'Gloss Laminated'){
        echo "Gloss Lam";
    } else echo "No Lamination";
} elseif(value of custom option == 'Matt Laminated +2days'){
        echo "Matt Lam";
    } elseif(value of custom option == 'Gloss Laminated +2days'){
        echo "Gloss Lam";
    } else 
echo "No Lamination";

&GT;

所以我需要在XSLT / XML中重现它。我知道这有点乱,但是我在一个设计糟糕的系统的工作范围内工作,除了采取这条路线之外别无选择。

干杯。

1 个答案:

答案 0 :(得分:0)

我不确定你的问题是什么。你有一些XSLT代码和一些PHP代码,它们看起来相当不同;我不知道为什么。我们无法看到您的源文档也无济于事。您的XSLT代码表明您已掌握了xsl:choose的基础知识;它当然可以嵌套到包含一个xsl:在xsl中选择:当另一个xsl:choose时。那你的问题究竟在哪里?

我要补充的一点是,有经验的XSLT用户经常避免编写复杂的xsl:选择指令并将逻辑分解为模板规则。所以你可能会看到一系列这样的模板规则:

<xsl:template match="options[@name='Laminated' and @value='Matt Laminated']">
  <xsl:text>Matt Lam</xsl:text>
</xsl:template>