2017-04-04 7 views
1

私は、XML(この場合はXSD)をXSLでXMLに変換するための優れたJavascriptライブラリを見つけるのに問題があります。私はいくつかのJavascriptライブラリをオンラインで見つけましたが、それらのどれも働いていません。私はそれをオンラインで( 'http://www.freeformatter.com/xsl-transformer.html'によって)変換しようとしました。しかし、私がJavascriptライブラリを使用すると、残念なことにそれは動作しません。私はここで何が間違っていますか?javascriptのxslトランスフォーマ?

これは私が今持っているコードです:

<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> 

'notworking.xsd' ファイル:

<xs:import schemaLocation="https://www.w3.org/2001/xml.xsd" namespace="http://www.w3.org/XML/1998/namespace"/> 

<xs:element name="list"> 
    <xs:complexType> 
     <xs:complexContent> 
      <xs:extension> 
       <xs:sequence> 
        <xs:element minOccurs="0" name="list.start" /> 
       </xs:sequence> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:element> 

'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> 
+0

「それはうまくいかない」と言ったらどういう意味ですか?エラーは何ですか?エラーを示すコードスニペットやプランナーを作成できますか? – mcgraphix

+0

ほとんどのブラウザには少なくともFFとMSIEのxslエンジンがあります。余分なjavascriptや呼び出しは必要ありません。 –

+0

ブラウザはXSLT 1.0しかサポートしていないので、それはXSLT 2.0スタイルシートですので、Saxon-CEブラウザでXSLT 2.0を実行する場合はSaxon-JSを使用します。 –

答えて

1

スタイルシートにはXSLT 2.0のサポートが必要です(たとえば、distinct-values()関数はXSLT 1.0には存在しません)。

メジャーブラウザベンダーが提供するXSLTプロセッサは、XSLT 1.0のみをサポートしています。

Saxon-JSを試してみてください:XSLT 3.0をサポートしています。 http://www.saxonica.com/saxon-js/index.xmlを参照してください(ドキュメントを読むことができれば、すでにブラウザでSaxon-JSが正常に動作しています)。