2014-12-02 147 views
0

选择元素我有什么,我想撒克逊CE XSLT 2.0处理器来转换XML文件:XSLT 2.0遍历数组的属性

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

我想通过一个数组来过滤这个XML文件。这阵是一个网页的选择复选框的结果,并传递给XSLT所有通过setParameter:

$("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> 

我怎么能循环阵列上,选择只与数组名的书吗?

+0

您已经编辑了示例并在参考'$ books'中使用了正确的参数名称,但是我想知道为什么您只需要与'$ books [1]'比较,如果您想根据数组中的所有项进行过滤。 – 2014-12-02 10:11:52

+0

我在阅读这个问题时意识到了错误。为了保持你的正确答案,我把它改回来了:)谢谢! – 2014-12-02 10:14:45

回答

1

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

情况下,你需要比我看不出有什么错在你的代码,并根据http://saxonica.com/ce/user-doc/1.1/index.html#!api/xslt20processor/setParameter参数值可以是一个Javascript数组

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

其他,所以希望Javascript和XSLT之间的交互工作。

+0

哦谢谢,那就是问题所在! – 2014-12-02 10:11:43