javascript中的xsl转换器?

javascript中的xsl转换器?,javascript,xml,xslt,transformation,Javascript,Xml,Xslt,Transformation,我很难找到一个好的Javascript库来通过XSL将XML(在本例中是XSD)转换为XML。我在网上找到了一些Javascript库,但没有一个能正常工作。。我尝试在线转换它(通过“”),这确实有效!但当我使用Javascript库时,不幸的是它不起作用。。我做错了什么 这是我现在掌握的代码: <html> <body> <div id="output"></div> <script type="text/javascript" src=

我很难找到一个好的Javascript库来通过XSL将XML(在本例中是XSD)转换为XML。我在网上找到了一些Javascript库,但没有一个能正常工作。。我尝试在线转换它(通过“”),这确实有效!但当我使用Javascript库时,不幸的是它不起作用。。我做错了什么

这是我现在掌握的代码:

<html>
<body>
<div id="output"></div>

<script type="text/javascript" src="jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="jquery.xslt.js"></script>
<script type="text/javascript">
    $(function() {
        $('#output').xslt({xmlUrl: 'notworking.xsd', xslUrl: 'notworking.xsl'});
    });
</script>
</body>
</html>

$(函数(){
$('#output').xslt({xmlUrl:'notworking.xsd',xslUrl:'notworking.xsl'});
});
“notworking.xsd”文件:


“notworking.xsl”文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:output method="xml" version="1.0" indent="yes" encoding="utf-8"/>

    <xsl:template match="xs:schema">
        <xsl:variable name="name" select="fn:distinct-values(.//xs:element/@name)"/>
        <xsl:variable name="schema" select="."/>
        <xsl:element name="xsd">
            <xsl:for-each select=".//xs:element[@name]">
                <xsl:sort select="@name"/>
                <xsl:apply-templates select="."/>
            </xsl:for-each>
        </xsl:element>
    </xsl:template>

    <xsl:template match="xs:element">
        <xsl:variable name="type" select="fn:tokenize(@type,':')[last()]"/>
        <xsl:variable name="base" select="fn:tokenize(ancestor::xs:schema/xs:complexType[@name=$type]/xs:complexContent/xs:extension/@base,':')[last()]"/>
        <xsl:element name="{@name}">
            <xsl:copy-of select="@minOccurs"/>
            <xsl:variable name="sequence" select="./xs:complexType/xs:sequence/xs:element|ancestor::xs:schema/xs:complexType[@name=$type]//xs:extension/xs:sequence/xs:element"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="text()">
        <xsl:if test="normalize-space() ne ''">
            <xsl:value-of select="."/>
        </xsl:if>
    </xsl:template>

</xsl:stylesheet>

样式表需要XSLT 2.0支持(例如,XSLT 1.0中不存在distinct-values()函数)

主要浏览器供应商提供的XSLT处理器仅支持XSLT1.0


试试Saxon JS:它支持XSLT 3.0。请参阅(如果您可以阅读文档,那么您已经在浏览器中成功运行了Saxon JS)。

您说“它不工作”是什么意思?错误是什么?您可以创建一个代码片段或plunker来显示错误吗?大多数浏览器中都有xsl引擎(至少是FF和MSIE),我认为,不需要额外的javascript或调用某种XSLT 2.0样式表,而浏览器只支持XSLT 1.0,因此如果您想在浏览器中运行XSLT 2.0,您需要查看Saxon CE或Saxon JS。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:output method="xml" version="1.0" indent="yes" encoding="utf-8"/>

    <xsl:template match="xs:schema">
        <xsl:variable name="name" select="fn:distinct-values(.//xs:element/@name)"/>
        <xsl:variable name="schema" select="."/>
        <xsl:element name="xsd">
            <xsl:for-each select=".//xs:element[@name]">
                <xsl:sort select="@name"/>
                <xsl:apply-templates select="."/>
            </xsl:for-each>
        </xsl:element>
    </xsl:template>

    <xsl:template match="xs:element">
        <xsl:variable name="type" select="fn:tokenize(@type,':')[last()]"/>
        <xsl:variable name="base" select="fn:tokenize(ancestor::xs:schema/xs:complexType[@name=$type]/xs:complexContent/xs:extension/@base,':')[last()]"/>
        <xsl:element name="{@name}">
            <xsl:copy-of select="@minOccurs"/>
            <xsl:variable name="sequence" select="./xs:complexType/xs:sequence/xs:element|ancestor::xs:schema/xs:complexType[@name=$type]//xs:extension/xs:sequence/xs:element"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="text()">
        <xsl:if test="normalize-space() ne ''">
            <xsl:value-of select="."/>
        </xsl:if>
    </xsl:template>

</xsl:stylesheet>