我通过 Saxon-js 运行这个 XSL 脚本。它使用在使用 stylesheetParams 的转换调用中接收到的 XML 更新主输入 XHTML 上的成本字段。都好。问题是没有对 param-XML 进行语法检查(您可以在注释掉的行中看到它的样子)。它在 XHTML 上,转换会生成错误,但不会在 param-XML 上。它只是允许它进入,然后键功能不会更新 XHTML。有没有办法在同一个转换调用中检查格式正确的 XML 参数,还是我必须使用 2 个转换调用:在 param-XSL 上调用转换进行语法检查,然后调用这个主转换来更新 XHTML ?
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
expand-text="yes">
<xsl:output method="html" omit-xml-declaration="yes" encoding="UTF-8" include-content-type="no"/>
<xsl:param name="cost-data"/>
<!-- <supplier><product><key>3</key><pcost uptype="1"><key>21341</key><cost>12.99</cost></pcost></product></supplier> -->
<!-- </xsl:param> -->
<xsl:key name="cost" match="product/pcost[@uptype = 1]/cost" use="'cost' || ancestor::product/key"/>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="td[@name][key('cost', @name, fn:parse-xml($cost-data))]/text()">{key('cost', ../@name, fn:parse-xml($cost-data))}%</xsl:template>
<xsl:template match="/" name="xsl:initial-template">
<xsl:next-match/>
</xsl:template>
</xsl:stylesheet>