我有一个XML Doc:
<?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样式表,可以将这些值转换为表格,只取出模型为策略的吉他:
<?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在基于用户输入的单独HTML文档中插入[model = 'Strat']
(也许用户输入“Strat”,也许他们输入“Jaguar”,结果表格基于此形成了自己,但是我在这个简化的层面上寻找基础级别的解释。
我正在考虑尝试在部分完成用户搜索时获取模型名称,并且我想使用函数contains(string, string)
我在使用
替换我的XSL中的select="//guitar[model = 'Strat']"
select="//guitar/model[contains(., 'Stra')]"
但是这会破坏结果表,只保留标题行并返回一个只显示“StratStrat”的单个“未装箱”行。
有什么想法吗?理想情况下,我会以某种方式继续使用“包含”方法,我想我搞乱了Xpath。或者它可能需要在xsl的模板匹配部分?谢谢!
答案 0 :(得分:1)
我在我的XSL中替换了
select="//guitar[model = 'Strat']"
与select="//guitar/model[contains(., 'Stra')]"
由于您的模板与guitar
匹配,因此您还需要将模板应用于guitar
,而不是应用于其子model
:
select="//guitar[contains(model, 'Stra')]"
P.S。 //
很昂贵 - 用准确的路径替换它,例如:
select="guitars/guitar[contains(model, 'Stra')]"