xslt文档功能问题

xslt文档功能问题,xslt,Xslt,如果正在使用文档功能并打开可能不存在的文件,例如 <xsl:variable name="input" select="document($A)/document/input"/> 处理错误的优雅方式是什么?如果文件无法打开,我希望变量有一个默认值。优雅的方法是在将参数输入样式表之前检查文件是否存在。优雅的方法是在将参数输入样式表之前检查文件是否存在。我相信您可以这样编写: <xsl:variable name="input"> <xsl:choose>

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

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


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

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

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

我相信您可以这样编写

<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中完成工作,您经常不得不进行黑客攻击。

我相信您可以这样编写

<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中完成任务,您常常不得不进行黑客攻击。

没有一种通用的方法来优雅地处理函数中的错误

根据

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

这意味着无论函数生成空节点集(很好,我们可以测试空(不存在)节点集)还是“发出错误信号”(通常可能会结束转换),我们都将由实现者决定

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


因此,无论是谁启动转换(例如从C#程序中启动转换),最好检查文件是否存在,并向转换传递一个适当的参数,以反映这种存在。

没有通用的方法来优雅地处理函数中的错误

根据

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

这意味着无论函数生成空节点集(很好,我们可以测试空(不存在)节点集)还是“发出错误信号”(通常可能会结束转换),我们都将由实现者决定

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


因此,无论是谁启动转换(例如从C#程序中启动转换),最好检查文件是否存在,并向转换传递一个适当的参数,以反映这种存在。

使用XPath 2.0中提供的doc-available()函数怎么样
使用XPath 2.0中提供的doc-available()函数怎么样

这并不是真正来自命令行,我只是用这种方式写了一个问题,让问题变得简单。(如果是的话,我同意你的意见。):-)看起来他们一定是用xslt“处理错误”的方法。这并不是真正来自命令行,我只是用这种方法写问题来简化它。(如果是的话,我同意你的意见。):-)看起来他们一定是用xslt“处理错误”的方式。正如我在回答中指出的,不能保证xslt处理器不会引发错误(xslt规范允许),因此,上面的回答不是完全正确的。正如我在回答中指出的,不能保证XSLT处理器不会引发错误(XSLT规范允许这样做),因此,上述答案并不完全正确。