xslt文档功能问题

时间:2009-03-15 21:32:01

标签: xslt

如果正在使用文档功能并打开可能不存在的文件,例如

<xsl:variable name="input" select="document($A)/document/input"/>

处理错误的优雅方式是什么?如果无法打开文件,我想要变量的默认值。

4 个答案:

答案 0 :(得分:7)

没有一般方法可以优雅地处理document()函数中的错误。

根据XSLT 1.0 spec

如果检索资源时出错,则XSLT处理器可能会发出错误信号;如果没有发出错误信号,则必须通过返回空节点集来恢复。”< / p>

这意味着我们受实现者的支配是否由函数生成空节点集(好,我们可以测试空(不存在)节点集)或者“发出错误信号”,这通常可能会导致转变。

如果我们检查了特定XSLT处理器的特定实现只生成一个空节点集并且没有结束转换,我们可能会决定测试这个条件并“正常”恢复。但是,我们的应用程序变得不可移植,它依赖于这个特定的XSLT处理器,并且绝对不能保证在下一个版本中这种行为不会变为更糟糕的行为。风险,不是吗?

因此,最好是启动转换的人(例如来自C#程序),检查文件是否存在并将适当的参数传递给转换,反映出这种存在

答案 1 :(得分:1)

我相信你可以这样写<xsl:variable>

<xsl:variable name="input">
 <xsl:choose>
  <xsl:when test="document($A)/document/testElementCondition = 'foo'">
   <xsl:value-of select="document($A)/document/input" />
  </xsl:when>
  <xsl:otherwise>
   <!-- add some default source document and logic that will then direct to an error message. -->
  </xsl:otherwise>
  </xsl:choose>
</xsl:variable>

太糟糕了,你经常不得不在XSL中完成任务。

答案 2 :(得分:1)

使用XPath 2.0中提供的doc-available()函数怎么样? : http://www.w3.org/TR/xpath-functions/#func-doc-available

答案 3 :(得分:0)

优雅的方法是在将参数提供给样式表之前检查文件是否存在。