我正在尝试使用jquery以编程方式插入appendTo()方法。我有一个格式化样式表,格式化xml表,但我使用jquery和javascript在第三个HTML文档中。我的原始xml采用以下格式:
<guitars>
<guitar>
<model>AStrat</model>
<year>1978</year>
<name>Strat</name>
<price>2500</price>
</guitar>
</guitars>
我的样式表是这样的:
<?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>Name</th>
<th>Price</th>
</tr>
<xsl:apply-templates select="/guitars/guitar">
</xsl:apply-templates>
</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="name"/> </td>
<td> <xsl:value-of select="price" /> </td>
</tr>
</xsl:template>
</xsl:stylesheet>
这是我的javascript。 stylesheet
是通过ajax导入的样式表,我检查过的工作正常。
var nodeToAppend = '<xsl:sort select="model" data-type="text"/>'
$(nodeToAppend).appendTo( $(stylesheet)
.find("xsl\\:apply-templates, apply-templates")
.first() );
但这似乎并不想采取。稍后,我通过XSLT处理器将XSL应用于XML。我有什么想法,我做错了什么? 基本上我想要这一行:
<xsl:apply-templates select="/guitars/guitar">
</xsl:apply-templates>
成为:
<xsl:apply-templates select="/guitars/guitar">
<xsl:sort select="model" data-type="text"/>
</xsl:apply-templates>
谢谢!
答案 0 :(得分:1)
您可以在XSLT中定义全局参数<xsl:param name="sort-key"/>
,然后使用
<xsl:apply-templates select="/guitars/guitar">
<xsl:sort select="*[local-name() = $sort-key]"/>
</xsl:apply-templates>
然后,您不必每次需要更改该密钥时操纵XSLT代码,而只需设置不同的参数,例如:给定var proc = new XSLTProcessor();
导入的样式表后,您可以设置例如在运行下一个转换之前proc.setParameter('', 'sort-key', 'model');
。无需操作XSLT样式表。
答案 1 :(得分:0)
XSLT
<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>Name</th>
<th>Price</th>
</tr>
<div id="append_here">
<xsl:apply-templates select="/guitars/guitar">
</xsl:apply-templates>
</div>
</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="name"/> </td>
<td> <xsl:value-of select="price" /> </td>
</tr>
</xsl:template>
</xsl:stylesheet>
<强> jquery的强>
//<xsl:apply-templates><![CDATA[
$(function() {
$("div#append_here" ).children().append('<xsl:sort select="model" data-type="text"/>');
});
//]]></xsl:apply-templates>
<强> JSFIDDLE 强>