2012-05-30 59 views
1

我正在處理一個XSL文件,如果相應的XML文件包含某個字符串,將會(在許多其他事物中)顯示一個按鈕。我似乎遇到了一個問題,即我得到的按鈕始終顯示(即使XML文件不包含我想要的值)或永不顯示(即使XML文件確實包含該值)XML的部分文件我關心的是:XSL如果包含

<sp_stList> 
<sp_st> 
<st_num>1234</st_num> 
<feanme>FAKE</feanme> 
<featyp>ST</featyp> 
<dirsuf></dirsuf> 
<dirpre></dirpre> 
<lv_apt></lv_apt> 
<mun>VAN</mun> 
<msgs> 
<msg filename="File.pdf">d:\folder1\fild.pdf</msg> 
</msgs> 
<spst_poly>0</spst_poly> 
<mes_switch>X</mes_switch> 
<cdts>20120103161202PS</cdts> 
</sp_st> 
</sp_stList> 

希望發生的事情是,當<mes_switch>包含X,則應該顯示的按鈕如果是空白的或有另一個字符它,那麼它應該不會顯示該按鈕。

我已經嘗試的代碼是:

<a name="Info"></a> 
    <xsl:if "contains(sp_stList/sp_st/mes_switch, 'X'))"> 
     <a href="#SpSt" style="color:orange" t:id="Spec_Sit_hdr"> 
      <img border="0" src="./file.jpg"></img> 
     </a> 
    </xsl:if> 

由於某種原因,這看起來沒有工作。任何幫助,你可以提供將不勝感激!

謝謝!

回答

3
<xsl:if "contains(sp_stList/sp_st/mes_switch, 'X'))"> 

這在語法上是非法的XML(因此ALO語法非法XSLT代碼:

  1. 的布爾表達式進行評估必須在test屬性來指定 - 沒有這樣的屬性存在

  2. 有右支架沒有相應的左支架

解決方案:糾正只是這兩個問題導致工作代碼:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 

    <xsl:template match="/"> 
     <a name="Info"></a> 
     <xsl:if test="contains(sp_stList/sp_st/mes_switch, 'X')"> 
      <a href="#SpSt" style="color:orange" id="Spec_Sit_hdr"> 
       <img border="0" src="./file.jpg"></img> 
      </a> 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

當這種變換所提供的XML文檔應用:

<sp_stList> 
    <sp_st> 
     <st_num>1234</st_num> 
     <feanme>FAKE</feanme> 
     <featyp>ST</featyp> 
     <dirsuf></dirsuf> 
     <dirpre></dirpre> 
     <lv_apt></lv_apt> 
     <mun>VAN</mun> 
     <msgs> 
      <msg filename="File.pdf">d:\folder1\fild.pdf</msg> 
     </msgs> 
     <spst_poly>0</spst_poly> 
     <mes_switch>X</mes_switch> 
     <cdts>20120103161202PS</cdts> 
    </sp_st> 
</sp_stList> 

通緝正確的結果被生產:

<a name="Info"/> 
<a href="#SpSt" style="color:orange" id="Spec_Sit_hdr"> 
    <img border="0" src="./file.jpg"/> 
</a> 
+0

只要添加到Dimitre的答案,我懷疑你想測試「等於」而不是「包含」。僅僅因爲你認爲英文中的「element contains value」並不意味着你需要contains()函數。 –

+0

感謝你們倆。我試圖修改列出的內容,但是現在系統根本不會處理XML文件。當我點擊到格式化XML所在的頁面時,它只顯示XSL代碼。 – user1424931

+0

@ user1424931:很可能您正在運行*而不是完全相同的轉換,而不是完全相同的源XML文檔。我總是測試我在答案中給出的解決方案是否正常運行並生成我提供的結果 - 事實上,我將轉換的結果複製並粘貼到答案中。因此,您需要從此答案中對來自此答案的確切源XML文檔運行確切的轉換 - 您將獲得相同的結果。那麼,很顯然你還有其他問題 - 但你一直在問的問題已經完全解決了。 –