2014-12-02 78 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