我有以下XSL:
<xsl:key name="Hosts" match="Report/Host" use="ID"/>
...
<xsl:for-each select="Report/Host[count(. | key('Hosts', ID)[1]) = 1 and Factor = 8]">
<xsl:variable name="ThisID" select="ID" />
<xsl:for-each select="/Report/Host[count(. | key('Hosts', Name)[1]) = 1]">
<xsl:for-each select="key('Hosts', Name)[ID = $ThisID]">
<xsl:value-of select="Name"/>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
当我通过FOP 1.1运行时(不确定fop是否应该责备),我收到此错误:
SEVERE: org.xml.sax.SAXParseException; systemId: file:/C:/temp/fop/fop-1.1/pdf-report.xml; lineNumber: 243; columnNumber: 180; java.lang.RuntimeException: Variable not resolvable: ThisID
...
; SystemID: file:/C:/temp/fop/fop-1.1/pdf-report.xml; Line#: 243; Column#: 180
javax.xml.transform.TransformerException: java.lang.RuntimeException: Variable not resolvable: ThisID
第243行,就是这一行:
<xsl:for-each select="Report/Host[count(. | key('Hosts', ID)[1]) = 1 and Factor = 8]">
我不明白为什么这不起作用
答案 0 :(得分:1)
我终于找到了错误,不是因为这个元素,Xalan只是不善于告诉你这个问题。
我之前有一个错误,它没有导致渲染“停止”,但确实导致任何额外的xsl:变量未经处理,反过来,不允许任何引用它们。
调试是这样的:
XSL声明:
<xsl:variable name="HostURIRequestSuffix">
<xsl:if test="/Report/Scan/ScanDetails/SelectedHostReport = 'true'">
<xsl:call-template name="GetHostsURL"/>
</xsl:if>
</xsl:variable>
这个错误:
file:/C:/temp/fop/fop-0.95/pdf-report.xml; Line #20; Column #48; org.xml.sax.SAXException: ElemTemplateElement error: GetHostsURL
javax.xml.transform.TransformerException: ElemTemplateElement error: GetHostsURL
出于某种原因,这导致任何额外的xsl:变量被忽略,而其余的渲染工作完美,一旦我修复了这一切,一切正常,感谢大家的帮助