2015-12-16 112 views
0

以下是我的XMLXSLT 2.0匹配表達式

<GSP VER="3.2"> 
<TM>0.065909</TM> 
<Q>Michael</Q> 
<PARAM name="q" value="Michael" original_value="Michael"/> 
<PARAM name="btnG" value="Google Search" original_value="Google+Search"/> 
<PARAM name="access" value="a" original_value="a"/> 
<PARAM name="output" value="xml_no_dtd" original_value="xml_no_dtd"/> 
<PARAM name="sort" value="date:D:L:d1" original_value="date:D:L:d1"/> 
<PARAM name="wc" value="200" original_value="200"/> 
<PARAM name="site" value="default_collection" original_value="default_collection"/> 
.. 

我要匹配的屬性「值」,這是「邁克爾」的值。

這是我的xslt。

<xsl:template name="gsa_custom_tabs"> 
    <xsl:variable name="tabs"> 
     <tabs> 
     <tab name="All" col="default_collection" ctype="All_tab"></tab> 
     <tab name="Courses" col="file_system" ctype="file_system"></tab> 
     <tab name="Policies" col="policy" ctype="policy"></tab> 
     <tab name="Library" col="lib" ctype="lib"></tab> 
     <tab name="Other Systems" col="other" ctype="other"></tab> 
     </tabs> 
    </xsl:variable> 
    <link rel="stylesheet" type="text/css" href="//xxx/collection_tabs.css"></link> 
    <div class="container" id="centeredmenu"> 
    <ul class="search-collection-list desktop"> 
     <xsl:for-each select="$tabs/tabs/tab"> 
      <xsl:variable name="col" select="@col" /> 
      <xsl:choose> 
       <xsl:when test="/GSP/PARAM[@name='site']/@value = 'default_collection'"> 
        <li class="search-collection-tab-item" id="active"> 
        <a href="{$gsa_search_root_path_prefix}?{$custom_tab_url}&amp;site={$col}" ctype="{@ctype}" class="Active">     
         <xsl:value-of select="@name"></xsl:value-of> 
        </a> 
        </li> 
       </xsl:when> 
      <xsl:otherwise> 
       <li class="search-collection-tab-item"> 
       <xsl:variable name="debug" select="/GSP/PARAM[@name='site']/@value"></xsl:variable> 
       <a href="{$gsa_search_root_path_prefix}?{$custom_tab_url}&amp;site={$col}" ctype="{@ctype}"> 
        <xsl:value-of select="@name"></xsl:value-of> 
        <xsl:value-of select="$debug"></xsl:value-of> 
       </a> 
       </li> 
      </xsl:otherwise> 
      </xsl:choose> 
     </xsl:for-each> 
    </ul> 
    </div> 
</xsl:template> 

假定變量$ col的值是Michael。

即使我可以看到XML包含節點,但測試失敗。

+0

我顯示了整個代碼。 –

回答

0

xsl測試需要一個條件,並使用選擇器。

你應該使用類似:

<xsl:when test="PARAM/@value = 'site'"> 
... 
</xsl:when> 

,因爲你的情況,你可以返回與attributs價值發現PARAM節點,但就它沒有測試:

/GSP/PARAM[(@name='site') and (@value='default_collection')] 

我會做像這樣:

<li class="search-collection-tab-item" id="active"> 
    <a href="{$gsa_search_root_path_prefix}?{$custom_tab_url}&amp;site={$col}" ctype="{@ctype}"> 
     <xsl:attribute name="class"> 
     <xsl:if test="/GSP/PARAM[@name='site']/@value = 'default_collection'">Active</xsl:if> 
     </xsl:attribute> 
    <xsl:value-of select="@name"></xsl:value-of> 
    </a> 
</li> 
+0

沒有工作。如果具有屬性名稱='site'的PARAM的值具有value ='default_collection' –

+0

答案已更新,則此選項卡需要處於活動狀態。但你仍然需要糾正一些事情,因爲我看到你的循環中的當前節點是'tab',並且我沒有在你的xml代碼片段中看到這個... – ylerjen

+0

我創建了一個名爲''並且它沒有任何值。 –