我实际上必须为xml创建一个关于食谱的xsl文件。我只需要展示用特定成分制作的食谱。 xml文件如下所示:
<recipe name="A">
<ingrediente name="B"></ingredient>
<ingrediente name="C"></ingredient>
</recipe>
我这样做:
<xsl:for-each select="recipe">
<xsl:if test="contains(ingredient/@name,'C')">
Shows the recipe
</xsl:if>
</xsl:for-each>
我遇到了一个问题,因为当我试图知道至少有一种成分是否有特定的名称时,它只是在讨论第一种成分。在该实例中,配方“A”具有成分“C”,但是它将不会显示,因为它仅检查第一种成分,即“B”。如果“C”是第一种成分,则显示配方。
知道如何做这项工作吗? (对不起,如果我的英语不是很好)
答案 0 :(得分:0)
您只需对脚本稍作修改即可。
这个想法是:
recipe
进行检查。ingredient
...... @*
)... /..
)并返回当前(recipe
)元素
进一步处理。所以for-each
循环应该如下所示:
<xsl:for-each select="recipe/ingredient[contains(@*,'C')]/..">
<xsl:copy-of select="."/>
</xsl:for-each>
请注意,可以检查任何属性是否包含指定的字符串,就像您在标题中所写的一样。
答案 1 :(得分:0)
更改
<xsl:for-each select="recipe">
<xsl:if test="contains(ingredient/@name,'C')">
Shows the recipe
</xsl:if>
</xsl:for-each>
到
<xsl:for-each select="recipe[ingredient/@name='C']">
Shows the recipe
</xsl:for-each>
因此,迭代是专门针对定义的 recipes
。另请注意,您不应在此使用contains()
,或者您还要匹配Carrots
和Corn
。