查询过滤为“stan”的XSLT返回名称

时间:2013-02-18 08:03:09

标签: xslt

<xsl:template match="country[@name]">
    <xsl:value-of select="."/>
    <xsl:if test="country=[*stan"]" >
    </xsl:if> </xsl:template> 

有人可以告诉我这个查询出错了吗?我应该只返回其中有“stan”的国家的名字(土库曼斯坦等)。 XML数据包括国家/地区,名称,人口。

1 个答案:

答案 0 :(得分:2)

您的代码有两个问题:

  1. if语句中的XPath表达式,因为它是错误的 不遵循XPath的语法。如果你想检查if 声明该国家的名称是否包含stan然后 XPath表达式应为:

     country[contains(@name, 'stan')]
    
  2. 即使进行了更正,样式表也不会与国家/地区名称匹配 其中包含'stan',因为匹配表达式匹配所有 具有名称属性(国家[@name])然后你的国家 使用模板内的value-of输出国家/地区名称。

  3. 修复代码的解决方案是将元素的值更改为 if元素,并从我指定的那个更改XPath表达式 之前。

    但是,在输入模板之前匹配条件要简单得多。 所以解决方案是:

    <xsl:template match="country[contains(@name, 'stan')]">
        <xsl:value-of select="@name" />
    </xsl:template>