2010-05-08 6 views
2

계산을 위해 xsl 변수에서 노드 집합을 얻으려고합니다. 하지만 내 코드는 다른 브라우저와 함께 Opera에서만 작동합니다. 오류가 계속 발생합니다.xsl : variable은 XSLT 2.0에서 노드 집합을 반환하지 않습니다?

모든 브라우저에서 실행되도록 수정하십시오. 미리 감사드립니다.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
<xsl:output method="html"/> 

<xsl:variable name="multipleSet"> 
<xsl:for-each select="myNums/numSet"> 
    <xsl:element name="multiple"><xsl:value-of select="num1 * num2"/></xsl:element> 
</xsl:for-each> 
</xsl:variable> 
<xsl:template match="/"> 
<table border="1"> 
    <tr> 
    <th>Num 1</th> 
    <th>Num 2</th> 
    <th>Multiple</th> 
    </tr> 
    <xsl:for-each select="myNums/numSet"> 
    <tr> 
    <td><xsl:value-of select="num1"/></td> 
    <td><xsl:value-of select="num2"/></td> 
    <td><xsl:value-of select="num1 * num2"/></td> 
    </tr> 
    </xsl:for-each> 
    <tr> 
    <th colspan="2" align="right">Total:</th> 
    <td><xsl:value-of select="sum($multipleSet/multiple)"/> </td> 
    </tr> 
</table> 
</xsl:template> 
</xsl:stylesheet> 

하고 XML :

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="test.xsl"?> 
<myNums> 
<numSet> 
    <num1>5</num1> 
    <num2>5</num2> 
</numSet> 
<numSet> 
    <num1>10</num1> 
    <num2>5</num2> 
</numSet> 
<numSet> 
    <num1>15</num1> 
    <num2>20</num2> 
</numSet> 
</myNums> 
+0

다른 브라우저에서 어떤 오류가 발생합니까? – Oded

+0

IE : 변수 또는 매개 변수 'multipleSet'에 대한 참조가 노드 목록으로 평가되어야합니다. Firefox : XSLT 변환 중 오류 : XPath 표현식이 NodeSet을 반환해야합니다. 늦게 답변 해 주셔서 감사합니다. – Henry

답변

0

웹 브라우저는 일반적으로 XSLT 2.0을 지원하지 않습니다 여기에

는 XSLT 코드입니다. Xpath sum()은 노드 집합을 기대합니다. 당신이 그것을 전달하는 것은 "result tree fragment"입니다. XSLT 1.1에서는 결과 트리 조각 데이터 형식이 제거되었습니다. 그래서 당신이 발생하는 것은 :

    오페라는 오페라 1.0 사양
에 완전히 맞지 않는
  • XSLT 2.0 (Opera specification)를 지원하지 않는 오류 메시지로 알려하지 않습니다
  • version="1.1"을 지정하고 도움이되는지 확인할 수 있습니다. 그렇지 않은 경우 브라우저가 exsl:node-set()을 지원하면 시도 할 수 있습니다.

  • +0

    네 말이 맞아. 처음에는 xslt 2.0 지원을 확인하지 않는 것이 좋지 않습니다. EXSLT를 사용하면 모든 것이 잘되지만 IE에서는 불가능합니다. MS는 자신의 msxsl 확장자를 사용합니다. xslt 2.0을 사용하는 브라우저에서 문서를 표시하려면 다른 방법을 찾아야합니다. 포인트를 주셔서 감사합니다. :) – Henry