我正在使用Googles XML自定义网站搜索(Google XML sitesearch),我在.NET中使用XSLT将结果转换为HTML。我有一些关于XSLT的问题。
1)Google将返回类似于以下内容的内容
<GSP VER="3.2">
<PARAM name="start" value="0" />
<PARAM name="num" value="10" />
<RES>
<R>
<PageMap>
<DataObject>
<Attribute name="Rating" value="4.5" />
<Attribute name="RatingCount" value="743" />
</DataObject>
</PageMap>
</R>
</RES>
</GSP>
我想知道以下内容:
我如何获得其中一个PARAM(即Start或num)的值? 我如何获得DataObject的一个属性的值?
任何帮助都非常感激。
由于
答案 0 :(得分:4)
在架构已知时,切勿使用//
。
要获得起始值使用:
/GSP/PARAM[@name='start']/@value
获取num参数:
/GSP/PARAM[@name='num']/@value
获得评分:
/GSP/RES/R/PageMap/DataObject/Attribute[@name='Rating']/@value
答案 1 :(得分:0)
使用XPath可以像这样引用这些值:
/GSP/PARAM[@name='num']/@value
对于DataObject属性,它将是
//DataObject/Attribute[@name='Rating']/@value
但是你需要澄清你需要获取这些值的上下文,因为在大多数情况下表达式可能会缩短(我使用完整路径)。
答案 2 :(得分:0)
如果需要通过各种上下文中的名称访问此示例中的params,我建议使用密钥。使用键还可以保护您的源不会一次又一次地重复xpath。
<!-- Key declaration -->
<xsl:key name="gsp-param" match="/GSP/PARAM/@value" use="../@name"/>
<xsl:template name="some-template">
<!-- Get key value in unknown context -->
<xsl:value-of select="key('gsp-param', 'num')"/>
</xsl:template>