XSLT 2.0循环数组按属性选择元素

时间:2014-12-02 09:55:56

标签: arrays xml xslt

我有一个XML文件,我想用Saxon-CE XSLT 2.0处理器进行转换:

<books>
    <book name="book1">
    <book name="book2">
    <book name="book3">
</books>

我想通过数组过滤此XML文件。此数组是网页选定复选框的结果,并使用setParameter传递给XSLT:

$("input:checkbox[id='books']" ).each(function() {           
    books.push($(this).val());
    });

//books: ["book1", "book2"] 

xslt = Saxon.requestXML("xsltfile.xsl");
xml = Saxon.requestXML("xmlfile.xml");
var xsltProc = Saxon.newXSLT20Processor(xslt);  
xsltProc.setParameter(null, "books", books);

现在我想选择数组中出现名称的所有书籍。

XSLT:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:param name="books"></xsl:param>
<xsl:variable name="mybooks" select="/books/book[@name=$param[1]]"/>    
</xsl:stylesheet>

如何遍历数组并仅选择具有数组名称的书籍?

1 个答案:

答案 0 :(得分:1)

如果是

<xsl:param name="books"></xsl:param>
<xsl:variable name="mybooks" select="/books/book[@name=$param]"/>

你需要

<xsl:param name="books"></xsl:param>
<xsl:variable name="mybooks" select="/books/book[@name=$books]"/>

除此之外,我没有在您的代码中看到任何错误,根据http://saxonica.com/ce/user-doc/1.1/index.html#!api/xslt20processor/setParameter,参数值可以是Javascript数组,因此希望Javascript和XSLT之间的交互有效。