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规范允许这样做),因此,上述答案并不完全正确。