3

我是 xml 和 xslt 的新手。

我使用经典的 asp 进行网络编码。我为我的网页使用 Windows 平台。并在本地计算机 ID“localhost/mywebpage”中。

今天我尝试用 xslt 运行一个 xml 文件,但我得到了错误

 msxml3.dll error '80004005'

Keyword xsl:template may not contain xsl:for-each-group. 

下面是我的运行代码

在xml中

<Lakes>
  <Lake>
    <id>1</id>
    <Name>Caspian</Name>
    <Type>Natyral</Type>
  </Lake>
  <Lake>
    <id>2</id>
    <Name>Moreo</Name>
    <Type>Glacial</Type>
  </Lake>
  <Lake>
    <id>3</id>
    <Name>Sina</Name>
    <Type>Artificial</Type>
  </Lake>
</Lakes>

在 xslt (XSLT 2.0)

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:for-each-group select="Lakes/Lake" group-by="Type">
            <xsl:result-document href="file{position()}.xml">
                <Lakes>
                    <xsl:copy-of select="current-group()"/>
                </Lakes>
            </xsl:result-document>
        </xsl:for-each-group>
    </xsl:template>
</xsl:stylesheet>

我是我的asp页面

<%
        'load xml
        set xml = server.createobject("microsoft.xmldom")
        xml.async = false
        xml.load(server.mappath("test.xml"))

        'load xsl
        set xsl = server.createobject("microsoft.xmldom")
        xsl.async = false
        xsl.load(server.mappath("test.xsl"))

        set xdm= server.createobject("msxml2.domdocument")
        xdm.async = false
        xdm.loadxml(xml.transformnode(xsl))
        xdm.save(server.mappath("test_r.xml"))

%>

我需要将我的 xslt1.0 升级到 xslt2.0 吗?

4

1 回答 1

3

您需要使用 XSLT 2.0 处理器;Microsoft 没有,因此如果您想使用 XSLT 2.0,您需要查看第三方选项,例如 AltovaXML http://www.altova.com/altovaxml.html。它的 API 记录在http://manual.altova.com/AltovaXML/altovaxmlcommunity/index.html?axcom_xslt2.htm。据我所知,这是经典 ASP 的最佳选择,如果您迁移到 ASP.NET,那么 Saxon 9 或 XmlPrime 的 .NET 版本也可以使用 XSLT 2.0 处理器。

于 2012-10-07T11:37:47.397 回答