foreach选择节点xslt

时间:2013-12-03 11:42:00

标签: xml xslt

我想使用foreach select = commands / command

从每个主菜获取签名
<root>
<commandes>
    <commande date="2012-12-05" numero="c1001">
        <entree ref="p1012732NC" prix="39.98" quantite="2" />
        <entree ref="p2203633" prix="149" quantite="1" />
        <entree ref="p2103625E" prix="249" quantite="1" />
        <entree ref="p3317" prix="325" quantite="2" />
    </commande>
    <commande date="2012-12-06" numero="c1002">
        <entree ref="p22651-02" prix="99.99" quantite="3" />
        <entree ref="p2212807DE" prix="79.98" quantite="2" />
        <entree ref="p5418151" prix="129" quantite="1" />
    </commande>
</commandes>
<produits>
    <produit type="chemise" promo="no">
        <reference>p1012732NC</reference>
        <signation>CHEMISE MARCO FERRERA</signation>
        <prixNormal>39.98</prixNormal>
        <prixPromo/>
        <image>w10-1012732nc-tq.jpg</image>
    </produit>
</produits>
</root>

MY XSL:

<xsl:template match="/catalogue">
  <xsl:for-each select="commandes/commande">
    <xsl:value-of select="idref(@ref)"/>
  </xsl:for-each>
</xsl:template>

我怎么能用xsl做到这一点?

1 个答案:

答案 0 :(得分:1)

您可能希望在此处阅读 xsl:key ,因为您可以使用它来查找其他节点的值。看起来您希望根据参考查找 produit 元素。在这种情况下,您可以像这样定义一个键:

<xsl:key name="idref" match="produit" use="reference" />

然后将其称为特定参考,您可以这样做

<xsl:value-of select="key('idref', 'p1012732NC')" />

这将返回 produit 元素。如果您想要签名值,则可以执行此操作

<xsl:value-of select="key('idref', 'p1012732NC')/signation" />

通常,您可以使用现有元素或属性的值来调用它。在您的情况下,您可以使用 entree 元素上的 ref 属性。因此,您的代码将如下所示:

<xsl:for-each select="commandes/commande/entree">
   <xsl:value-of select="key('idref', @ref)/signation"/>
</xsl:for-each>