0

我需要创建一个利用 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>

所以我需要检查产品的名称,如果它包含单词 lamination 然后运行另一个 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";

?>

所以我需要在 XSLT/XML 中重现它。我知道这有点混乱,但我正在一个设计糟糕的系统的约束下工作,除了走这条路外,别无选择。

干杯。

4

1 回答 1

0

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

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

<xsl:template match="options[@name='Laminated' and @value='Matt Laminated']">
  <xsl:text>Matt Lam</xsl:text>
</xsl:template>
于 2012-04-24T17:20:31.040 回答