如何从XML中复制满足给定属性条件的元素?

时间:2018-02-12 14:22:48

标签: xml xslt

INPUT XML

<?xml version="1.0" encoding="UTF-8"?>
<breakfast_menu>
<food>
    <item name = "Belgian Waffles" price = "$5.95" calories = "650" />
    <item name = "Strawberry Belgian Waffles" price = "$7.95" calories = "900" />
</food>
</breakfast_menu>

所以,基本上我想要打印价格属性大于6美元的商品。

输出XML

<food>
    <item name = "Strawberry Belgian Waffles" price = "$7.95" calories = "900" />
</food>

我必须使用XSL来做,我也尝试过。

MY Attempt

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:output method="html" indent="yes" />

<xsl:for-each select="breakfast_menu/food[@price &gt; 6]">
</xsl:for-each>


</xsl:template>
</xsl:stylesheet>

这不起作用。请建议解决方法。感谢。

2 个答案:

答案 0 :(得分:2)

不幸的是,我不知道整个结构的结构。但如果它只包含那些标签,那么使用这个xslt就足够了:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" indent="yes" />
   <xsl:template match="/">
      <xsl:for-each select='breakfast_menu/food/item[number(substring-after(@price,"$")) &gt; 6]'>
         <food>
            <xsl:copy-of select="."/>
         </food>
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

基本上你的foreach不正确 - 缺少&#34;项目&#34;

<xsl:for-each select="breakfast_menu/food[item/@price > 6]"/>

现在应该没问题