2009-01-14 35 views
5

Tôi đang cố gắng lấy một số xpath từ biến xsl sử dụng xsl ver 1.0. Đó là biến tôi:lấy xpath từ biến xsl

<xsl:variable name ="myVar"> 
     <RefData RefTag="test1" bbb="false" /> 
     <RefData RefTag="test2" bbb="false" /> 
     <RefData RefTag="test3" bbb="false" /> 
     <RefData RefTag="test4" bbb="true" /> 
     <RefData RefTag="test5" bbb="false" /> 
     <RefData RefTag="test6" bbb="false" /> 
    </xsl:variable> 

tôi đang cố gắng để có được giá trị bbb attribure sử dụng giá trị RefTag:

<xsl:if test="$myVar/RefData[@RefTag = 'test3']/@bbb"> 

này không hoạt động.

VS Trình gỡ lỗi XSL trả về lỗi: "Để sử dụng phân đoạn cây kết quả trong biểu thức đường dẫn, trước tiên hãy chuyển đổi nó thành tập hợp nút bằng cách sử dụng hàm msxsl: node-set()."

Tôi không hiểu cách sử dụng hàm msxsl: node-set() và dù sao tôi không thích sử dụng tên tệp msxsl.

Có ai có thể trợ giúp ở đây không?

Trả lời

8

Một giải pháp mà không cần xxx: node-set() mở rộng như sau:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 
<!--           --> 
    <xsl:variable name ="myVar"> 
     <RefData RefTag="test1" bbb="false" /> 
     <RefData RefTag="test2" bbb="false" /> 
     <RefData RefTag="test3" bbb="false" /> 
     <RefData RefTag="test4" bbb="true" /> 
     <RefData RefTag="test5" bbb="false" /> 
     <RefData RefTag="test6" bbb="false" /> 
    </xsl:variable> 
<!--           --> 
    <xsl:variable name="vrefVar" select= 
    "document('')/*/xsl:variable[@name='myVar']" 
    /> 
<!--           --> 
    <xsl:template match="/"> 
     <xsl:value-of select="$vrefVar/*[@RefTag='test3']/@bbb"/> 
    </xsl:template> 
</xsl:stylesheet> 

Khi chuyển đổi ở trên ormation được áp dụng trên bất kỳ tài liệu XML (không sử dụng), kết quả mong muốn được sản xuất:

false

Đừng chú ý sử dụng XSLT document() chức năng để truy cập cần <xsl:variable> đơn giản là một yếu tố trong một tài liệu xml.

1
<xsl:variable name="myVariable" select="msxsl:node-set($myVar)"/> 

Bạn có thể tránh không gian tên msxsl bằng cách di chuyển nội dung biến vào nguồn xml.

-1

Giả sử XML này:

<test1> 
    <RefData RefTag="test1"/> 
    <RefData RefTag="test2"/> 
    <RefData RefTag="test3"/> 
    <RefData RefTag="test4"/> 
    <RefData RefTag="test5"/> 
    <RefData RefTag="test6"/> 
</test1> 

Something như thế này có thể làm việc:

<xsl:template match="/"> 
    <xsl:apply-templates select="test1/RefData"/> 
</xsl:template> 

    <xsl:template match="RefData"> 
    <xsl:variable name="myVar"> 
     <xsl:choose> 
     <xsl:when test="@RefTag = 'test1'">false</xsl:when> 
     <xsl:when test="@RefTag = 'test2'">false</xsl:when> 
     <xsl:when test="@RefTag = 'test3'">false</xsl:when> 
     <xsl:when test="@RefTag = 'test4'">true</xsl:when> 
     <xsl:when test="@RefTag = 'test5'">false</xsl:when> 
     <xsl:when test="@RefTag = 'test6'">false</xsl:when> 
     <xsl:otherwise>true</xsl:otherwise> 
     </xsl:choose> 
    </xsl:variable> 
    <!--<text x="{$myVar}"/>--> 
    </xsl:template> 
+0

Tôi nghĩ rằng bạn không hiểu câu hỏi. dữ liệu này không có trong xml đầu vào vì vậy tôi không thể giả định xml abouve. Tôi cần sử dụng biến xsl: – Schwartser

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