Xslt XSL的异常模板行为

Xslt XSL的异常模板行为,xslt,Xslt,在非常简单地使用XSL和XSLT时,遇到了一些非常奇怪的行为 这是一个代码示例 <xsl:template match="check"> <div class="check"> <xsl:apply-templates mode="check"> <xsl:with-param name="checkName">testVariable</xsl:with-param> </xsl:apple-templates> &

在非常简单地使用XSL和XSLT时,遇到了一些非常奇怪的行为

这是一个代码示例

<xsl:template match="check">

<div class="check">

<xsl:apply-templates mode="check">
<xsl:with-param name="checkName">testVariable</xsl:with-param>
</xsl:apple-templates>

</div>

</xsl:template>

测试变量
上面调用的模板

<xsl:template match="option" mode="check">
    <xsl:param name="checkName" />

    <div class="option">
        <input type="checkbox">
        </input>

        <label>
            testText
        </label>
    </div>
</xsl:template>

测试文本
很简单吧? 它应该为XML中实例的每个实例创建一个带有硬编码标签的复选框

然而,我得到的是

<div class="check"></div>
<div class="option>Checkbox stuff here</div>
<div class="option>Checkbox stuff here</div>
<div class="option>Checkbox stuff here</div>
<div class="option>Checkbox stuff here</div>
<div class="check"></div>
<div class="option>Checkbox stuff here</div>
<div class="option>Checkbox stuff here</div>
<div class="option>Checkbox stuff here</div>
<div class="option>Checkbox stuff here</div>

这里是复选框
这里是复选框
这里是复选框
这里是复选框
下面是一些示例XML

<check><option key="1"/><option key="0"/><option
            key="0"/><option key="0"/><option
        key="0"/></check>


有人知道发生了什么吗D

问题要么在于您没有向我们展示的XML文档/代码中,要么不太可能是您使用了有缺陷的XSLT处理器。

此转换(您的代码包装在
中):


测试变量
测试文本
应用于提供的XML文档时

<check>
    <option key="1"/>
    <option key="0"/>
    <option key="0"/>
    <option key="0"/>
    <option key="0"/>
</check>
<div class="check">
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
</div>

生成所需的正确结果

<check>
    <option key="1"/>
    <option key="0"/>
    <option key="0"/>
    <option key="0"/>
    <option key="0"/>
</check>
<div class="check">
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
</div>

测试文本
测试文本
测试文本
测试文本
测试文本
我已经验证了转换在与运行时会产生相同的结果:

  • 撒克逊6.5.4

  • MSXML3、MSXML4、MSXML6

  • .NET XslCompiledTransform和XslTransform

  • 萨克森9.1.05

  • AltovaXML(XML-SPY)

  • XQSharp


问题在于您没有向我们展示的信息。这个问题没有提供足够的数据供任何人帮助。请提供:1.完整(但尽可能少)的XML文档。2.完整(但尽可能少)的XSLT样式表。3.将(2)中提供的转换应用于(1)中提供的XML文档时产生的完整结果。4.解释转换预期要做什么和产生什么。5.解释为什么转换的当前结果似乎是错误的。@bobber205:仅凭输入示例和这两条规则,您无法获得输出。@Dimitre我想我已经提供了我所能提供或需要的一切。当前的结果似乎是错误的,因为在下一个div开始之前就结束了。所讨论的XSL文件非常大且模块化。我认为这可能是所有相关的内容。@bobber205:从我的回答中可以看出(也请您自己进行转换),您提供的代码仅包装在
指令中,当应用于您提供的XML文档时,会产生完全不同的结果(我认为这些是您想要的结果)而不是你提供的结果???请更正您的问题。您的转换所得到的结果确实是期望的结果。这个XSL文档相当复杂,但我想我已经把可能存在问题的部分切掉了。老实说,我不知道还有什么我可以包括,这将是相关的或我可以这样做。有什么方法可以检查我的XSLT处理器吗?我发现吐出的HTML有错误。XSLT给出的是预期的HTML,而预期的HTML是不正确的。我在另一个非常类似的情况下遇到过这种情况。这次我从变压器输出的文本确实是错误的。我现在应该在transformer中寻找什么?@bobber205:首先要提供一个完整的示例,确定您正在使用的XSLT处理器,并要求其他人独立地重新编程和确认不需要的行为。如果发生这种情况,那么下一步就是通知供应商/开发人员该错误。我将在将来尝试这样做。我能够在空的span标签中添加一个不间断的空格,解决了这个问题。@bobber205:是的,通常
产生
,尽管我没有使用Xalan的经验。