2009-11-24 37 views
0

我責備Google Search Appliance讓我問這個問題。在XSLT 1.0中,如何訪問特定XML元素的屬性,當它是具有相同名稱的多個元素之一時?

這裏是由設備返回的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"/> 
... 

我需要做一個xsl:對於那些param元素的特定一個,-的值有條件地基於它的名字。例如我需要用@ name =「client」輸出PARAM元素的@value。

謝謝!

回答

3

在您的XPath語句中嘗試使用predicates! 嘗試類似:

<xsl:value-of select="PARAM[@name='output']/@value"/> 
3
<xsl:value-of select="//PARAM[@name='client']/@value" /> 

您沒有添加完整的XML文檔。如果涉及默認名稱空間,則必須聲明要使用的前綴,並將其分別添加到元素和屬性名稱中。

5

你可以聲明XSL:關鍵的頂級元素:

<xsl:key name="param" match="PARAM" use="@name"/> 

,然後用鑰匙(鑰匙名,value)函數。

<xsl:value-of select="key('param','q')/@value"/> 

'init'鍵需要時間,但是比每次選擇節點[謂詞]要快得多。因此,當您需要多次訪問PARAM時最好使用它。

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

同時,瞭解你的樹,你可以更準確地匹配您的節點(PARAM)。

相關問題