xsl:for-each在此上下文中不受支持

时间:2010-05-31 15:47:17

标签: xml xslt

我有这个XSLT文档:

<xsl:stylesheet version="1.0" xmlns:mstns="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/MyDocRootElement">
    <xs:schema id="DataSet" targetNamespace="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" >
        <xs:element name="DataSet" msdata:IsDataSet="true">
            <xs:complexType>
                <xs:choice maxOccurs="unbounded">
                    <xs:element name="Somename"> </xs:element>
                    <xs:element name="OtherName">

                    </xs:element>
                    <!-- FOR EACH NOT SUPPORTED? -->
                    <xsl:for-each select="OtherElements/SubElement">
                             <xs:element name="OtherName">

                            </xs:element>
                    </xsl:for-each>
                </xs:choice>
            </xs:complexType>
        </xs:element>
    </xs:schema>
</xsl:template>
</xsl:stylesheet>

我有一个验证错误,指出“在此上下文中不支持for-each元素”

我猜它与xs名称空间验证有关。

关于如何使这项工作的任何想法? (排除验证?)

由于 亚历

3 个答案:

答案 0 :(得分:0)

我认为这是一个IDE错误。

XSLT有效,编译正常。

答案 1 :(得分:0)

<强>更新

提交问题的@alexbf在评论中声明他没有执行任何验证,错误是使用XslCompiledTransform(.NET)运行转换的结果。

我已经验证样式表在没有任何问题的情况下编译和执行XslCompiledTransform - 在VS2008和使用nxslt.exe命令行实用程序。

错误的原因在于未显示的代码 - 准备并启动转换的代码。


验证 XSLT样式表很少(如果有的话)!

毕竟,XSLT处理器更好地完成了这项任务 - 执行额外的语义验证,这些验证并不总是在XSL架构中用XSLT表示。

第二个问题是您使用不是针对XSLT的架构验证XSLT样式表,而是针对其他文档类型...

推荐:永远不要尝试验证您的XSLT样式表。验证对您的自定义文档类型有意义,例如XSLT处理中涉及的源XML文档或此XSLT处理的结果文档。

答案 2 :(得分:0)

更新:

问题与XSLT中的其他内容有关。为了这篇文章,我已经删除了XSLT,但我意识到问题确实存在于我删除的部分中。错误消息具有误导性。

它与&lt; xsl:comment&gt;相关我用来保存临时XSLT代码的元素。

我删除了整个&lt; xsl:comment&gt;部分,它现在完美地运作

对不起,感谢您的帮助。