2012-06-30 29 views
5

Cách chuyển các biến giữa hai mẫu trong XSLT.Cách chuyển các biến giữa hai mẫu trong XSLT

Tôi không thể sử dụng biến toàn cục vì giá trị của biến phụ thuộc vào nút hiện tại đang được đánh giá.

Nói rằng tôi có XSLT của loại:

<xsl:template match="product"> 
<xsl:variable name="pr-pos" select="count(./preceding-sibling::product)+1"/> 
.. 
.. 
.. 
<xsl:apply-templates select="countries/country"/> 
</xsl:template> 

<xsl:template match="countries/country"> 
<tr id="country-id"> 
    <td><a href="#" class="action" id="{concat('a-',$pr-pos)}">+</a></td> 
.. 
.. 

này cho lỗi như $ pr-pos là không thể truy cập trong mẫu thứ hai.

Làm cách nào để chuyển giá trị biến pr-pos sang mẫu khác? Tôi có thể làm cái này như thế nào?

+0

Trong trường hợp của bạn, bạn không thực sự cần phải chuyển một biến. Giá trị của '$ pr-pos' mà bạn muốn truyền là có thể nhận ra từ bên trong mẫu' country'. – Utkanos

+0

Tất cả các ngôn ngữ lập trình (tốt, hầu hết) đều có phương tiện để truyền thông tin đến một đơn vị thực hiện khác và học cách thực hiện điều đó là một trong những nguyên tắc cơ bản. Câu hỏi này tương đương với việc hỏi, làm thế nào để tôi chuyển các biến giữa hai hàm trong JavaScript, hoặc nói "Tôi đã thử' hàm a() {var i = 5; b();} hàm b() {alert (i); } 'nhưng' i' không thể truy cập trong hàm thứ hai. " –

+0

@torazaburo: Tôi không thể hữu ích giải thích cho tôi cách làm điều này trên google.I không biết đó là lý do được hỏi, nếu bạn gặp sự cố từ những người đặt câu hỏi tại sao bạn không vô hiệu hóa tài khoản của mình trên StackOverflow. Tìm kiếm trên google và cho tôi biết bạn tìm thấy bất kỳ tài liệu nào tốt về tài liệu này ngoài tài liệu w3. – Harshdeep

Trả lời

10
<xsl:template match="product"> 
    <xsl:variable name="pr-pos" select="count(./preceding-sibling::product)+1"/> 
    .. 
    .. 
    .. 
    <xsl:apply-templates select="countries/country"> 
     <xsl:with-param name="pr-pos" select="$pr-pos" /> 
    </xsl:apply-templates> 
</xsl:template> 

<xsl:template match="countries/country"> 
    <xsl:param name="pr-pos" /> 
    <tr id="country-id"> 
     <td><a href="#" class="action" id="{concat('a-',$pr-pos)}">+</a></td> 
     .. 
     .. 
+0

Tôi đã tìm kiếm một số chi tiết và đã làm chính xác điều tương tự, trước khi kiểm tra câu trả lời trên StackOverflow, và nó LÀM VIỆC. Sau đó, cảm ơn sự giúp đỡ của bạn :) – Harshdeep

Các vấn đề liên quan