2017-03-15 94 views
0

我有一個XML文檔的部分匹配的表:填充基於節點

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet href="guitarsXSLStyleSheet.xsl" type="text/xsl"?> 
<guitars> 
    <guitar> 
     <model>Strat</model> 
     <year>1978</year> 
     <price>2500</price> 
    </guitar> 
    <guitar> 
     <model>Jaguar</model> 
     <year>2006</year> 
     <price>400</price> 
    </guitar> 
    <guitar> 
     <model>Strat</model> 
     <year>2015</year> 
     <price>900</price> 
    </guitar> 
    <guitar> 
     <model>Tele</model> 
     <year>1981</year> 
     <price>1200</price> 
    </guitar> 
</guitars> 

我有一個XSL樣式表,其將這些值中一個表,拔除只有吉他,其中所述模型是STRAT:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes"/> 

    <xsl:template match="/"> 
     <table id="guitarTable" border="1" width="200"> 
      <tr class="header"> 
       <th>Model</th> 
       <th>Year</th> 
       <th>Price</th> 
      </tr> 
      <xsl:apply-templates select="//guitar[model = 'Strat']"/> 
     </table> 
    </xsl:template> 

    <xsl:template match="guitar"> 
     <tr> 
      <td> <xsl:value-of select="model" /> </td> 
      <td> <xsl:value-of select="year" /> </td> 
      <td> <xsl:value-of select="price" /> </td> 
     </tr> 
    </xsl:template> 

</xsl:stylesheet> 

現在,在現實的XSL文檔,我根據用戶輸入(將通過jQuery的[model = 'Strat']一個單獨的HTML文檔中也許類型「Strat的」,也許他們鍵入「美洲虎」的用戶,所得到的表格基於此形成自己的表格),但我期待更多在這個簡化的級別上的基礎級解釋。

我想試圖讓在用戶的搜索的部分完成的型號名稱,我想使用的功能contains(string, string)

我雖然更換的:與

select="//guitar[model = 'Strat']"在我的XSL select="//guitar/model[contains(., 'Stra')]"

但是,這樣會產生表格,只是保留標題行並返回一個只顯示「StratStrat」的單個「取消裝箱」行。

任何想法?我最好在這裏以某種方式繼續使用「contains」方法,我想我搞亂了Xpath。或者也許它需要在xsl的模板匹配部分?謝謝!

+2

您的模板匹配'吉他',所以請嘗試'選擇=「/ /吉他[包含(模型,'斯特')]」'。附: ''//昂貴 - 用確切的路徑替換它。 –

+0

這樣做!謝謝。希望你把這個作爲答案,以便我可以檢查它是否正確。 – NateH06

+0

如你所願。 --- –

回答

1

我雖然更換的:與

select="//guitar/model[contains(., 'Stra')]" 

select="//guitar[model = 'Strat']"在我的XSL 由於您的模板相匹配guitar,你需要模板應用於guitar過,不給其子model

select="//guitar[contains(model, 'Stra')]" 

P.S. //是昂貴的 - 例如:

select="guitars/guitar[contains(model, 'Stra')]"