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

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

4

1 回答 1

2

您的代码中有两处错误:

  1. if 语句上的 XPath 表达式,这是错误的,因为它不遵循 XPath 的语法。如果要在 if 语句中检查国家/地区名称是否包含 stan,则 XPath 表达式应为:

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

修复代码的一种解决方案是将 value-of 元素更改为 if 元素,并将 XPath 表达式从我之前指定的表达式中更改。

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

<xsl:template match="country[contains(@name, 'stan')]">
    <xsl:value-of select="@name" />
</xsl:template>
于 2013-02-18T08:21:20.900 回答