在XSLT 1.0中,当它是具有相同名称的多个元素之一时,如何访问特定XML元素的属性?

0 xml xslt xpath

我责怪谷歌搜索设备让我问这个问题.

以下是设备返回的XML片段:

<GSP VER="3.2">
<TM>0.073846</TM>
<Q>test</Q>
<PARAM name="entqr" value="0" original_value="0"/>
<PARAM name="access" value="p" original_value="p"/>
<PARAM name="output" value="xml_no_dtd" original_value="xml_no_dtd"/>
<PARAM name="sort" value="date:D:L:d1" original_value="date%3AD%3AL%3Ad1"/>
<PARAM name="ud" value="1" original_value="1"/>
<PARAM name="ie" value="UTF-8" original_value="UTF-8"/>
<PARAM name="btnG" value="Search" original_value="Search"/>
<PARAM name="client" value="default_frontend" original_value="default_frontend"/>
<PARAM name="oe" value="UTF-8" original_value="UTF-8"/>
<PARAM name="q" value="I like stuff" original_value="I like stuff"/>
...
Run Code Online (Sandbox Code Playgroud)

我需要为这些PARAM元素中的特定一个执行xsl:value-of,有条件地根据其名称.例如,我需要使用@ name ="client"输出PARAM元素的@value.

谢谢!

Mik*_*ike 5

您可以将xsl:key声明为顶级元素:

  <xsl:key name="param" match="PARAM" use="@name"/>
Run Code Online (Sandbox Code Playgroud)

然后使用key(key-name,value)函数.

<xsl:value-of select="key('param','q')/@value"/>
Run Code Online (Sandbox Code Playgroud)

'init'键需要时间,但进一步比每次选择节点[谓词]要快得多.因此,当您需要多次访问PARAM时,最好使用它.

http://www.w3.org/TR/xslt#key

此外,了解您的树,您可以更准确地匹配您的节点(PARAM).