【问题标题】:xsl:for-each not supported in this context在此上下文中不支持 xsl:for-each
【发布时间】:2010-05-31 15:47:16
【问题描述】:

我有这个 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 命名空间验证有关。

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

谢谢 亚历克斯

【问题讨论】:

  • 好问题 (+1)。详细解释见我的回答。
  • 您应该包含执行转换的 .NET 代码以获得此问题的答案。

标签: xml xslt


【解决方案1】:

更新

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

我已经验证了样式表使用 XslCompiledTransform 编译和执行没有任何问题——无论是在 VS2008 中还是使用 nxslt.exe 命令行实用程序。

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


验证 XSLT 样式表几乎没有意义!

毕竟,XSLT 处理器在这项任务上做得更好——执行额外的语义验证,这并不总是在 XSLT 的 XSD 模式中表达。

第二个问题是您正在验证 XSLT 样式表,其架构不是针对 XSLT,而是针对另一种文档类型...

建议:切勿尝试验证您的 XSLT 样式表。验证对您的自定义文档类型有意义,例如 XSLT 处理中涉及的源 XML 文档或此 XSLT 处理的结果文档。

【讨论】:

  • 我明白,但我并没有真正验证 XSLT。该错误是由 XSLT 处理器引发的 (.NET : XslCompiledTransform)
  • @alexbf:您的样式表使用 XslCompiledTransform 编译和执行没有任何问题——无论是在 VS2008 中还是使用 nxslt.exe 命令行实用程序。错误的原因在于您未显示的代码 - 准备并启动转换。
  • @alexbf:显示创建XslCompiledTransform 实例并调用其Transform() 方法的代码。问题就在那里。
【解决方案2】:

我相信这是一个 IDE 错误。

XSLT 有效,可以正常编译。

【讨论】:

    【解决方案3】:

    更新:

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

    这与我用来保存临时 XSLT 代码的 元素有关。

    我删除了整个 部分,现在它可以正常工作了

    很抱歉给您带来了困扰,感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多