Xslt XSL的异常模板行为
在非常简单地使用XSL和XSLT时,遇到了一些非常奇怪的行为 这是一个代码示例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: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
指令中,当应用于您提供的XML文档时,会产生完全不同的结果(我认为这些是您想要的结果)而不是你提供的结果???请更正您的问题。您的转换所得到的结果确实是期望的结果。这个XSL文档相当复杂,但我想我已经把可能存在问题的部分切掉了。老实说,我不知道还有什么我可以包括,这将是相关的或我可以这样做。有什么方法可以检查我的XSLT处理器吗?我发现吐出的HTML有错误。XSLT给出的是预期的HTML,而预期的HTML是不正确的。我在另一个非常类似的情况下遇到过这种情况。这次我从变压器输出的文本确实是错误的。我现在应该在transformer中寻找什么?@bobber205:首先要提供一个完整的示例,确定您正在使用的XSLT处理器,并要求其他人独立地重新编程和确认不需要的行为。如果发生这种情况,那么下一步就是通知供应商/开发人员该错误。我将在将来尝试这样做。我能够在空的span标签中添加一个不间断的空格,解决了这个问题。@bobber205:是的,通常
产生
,尽管我没有使用Xalan的经验。