2011-10-29 11 views
3

SVGファイルをXSLTを通してHTML5キャンバスに変換する必要があります。 問題はJavascriptについてです。 SVGファイルで 私はこの単純な例のように、いくつかのコードでスクリプトタグを持っている:XSLT:xmlからhtmlにJavascriptコードをコピーして、いくつかの行を修正する方法

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="transform.xsl"?> 
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" 
id="slot" width="320" height="245"> 

    <script type="application/javascript"><![CDATA[ 
     var test = 2; 
     alert("This is a test!"); 
    ]]></script> 

    <----here svg drawing tags---> 

</svg> 

は、私はいくつかの部分で変更JavascriptのコードをHTML、そしてこのように、いくつかの新しいコードを追加するために出力したい:

<html> 
    <head> 
    <title> SVG to HTML5!</title> 

    <script type="application/javascript"> 
     var new_test;     <---the new code---> 

     var test = 4;     <---this is the modified code from 
     alert("This is a new test!");     svg file---> 
    </script> 
    </head> 
    <body> 
    </body> 
</html> 

どうすればいいですか?

+0

あなたの例は明らかではありません。 JavaScriptコードのどのような変更を実行しますか? – liori

+0

コードの行を他のものに変更する必要があります。例えば、 document.getElementById( "x")。firstChild.nodeValue = x; 〜 document.getElementById( "x")。setAttribute( 'value'、x); コードの行に対処し、それを私が欲しいものに変更する方法があれば、私は問題を解決します! – MrMoog

+0

私のXSLTの知識は少し進歩していますが、XSLTではこの種のテキスト編集は不可能ではないにしても非常に難しいと思います。もちろん私は間違っているかもしれません。 – liori

答えて

1

それは個々のラインの置換/挿入/削除を行います(多少複雑)コードを記述することは可能ですが、はるかに簡単なアプローチは、完全なscript要素置き換えることです:場合は、この変換

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:svg="http://www.w3.org/2000/svg" 
xmlns="http://www.w3.org/2000/svg"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:param name="pNewScript"> 
    <script type="application/javascript"> 
     var new_test;     

     var test = 4;     
     alert("This is a new test!");     
    </script> 
</xsl:param> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="svg:script"> 
    <xsl:copy-of select="$pNewScript"/> 
</xsl:template> 
</xsl:stylesheet> 

を(整形式に補正)提供されるXML文書に適用されます。

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" 
id="slot" width="320" height="245"> 

    <script type="application/javascript"><![CDATA[ 
     var test = 2; 
     alert("This is a test!"); 
    ]]></script> 

    <!-- here svg drawing tags --> 

</svg> 

指名手配、正しい結果が生成され

<svg xmlns="http://www.w3.org/2000/svg" 
xmlns:xlink="http://www.w3.org/1999/xlink" 
id="slot" width="320" height="245"> 
    <script xmlns:svg="http://www.w3.org/2000/svg" type="application/javascript"> 
     var new_test;     

     var test = 4;     
     alert("This is a new test!");     
    </script><!-- here svg drawing tags --> 
</svg> 
+0

あまりにも複雑ではない方法でできればありがとう、ありがとう、私は代わりにコードを使用します。 – MrMoog

+0

これはあなたが提出できる新しい質問のトピックだと思います。最初の質問の件名と精度を下げることに成功したことをお祝いします。将来的には、可能な限り正確かつ具体的にしてください。レスポンダーが修正/推測する作業を必要としない完全で適切な例を常に提供してください。 XSLT 2.0を利用できないと思います。 XSLT 2.0では、このような行番号の操作は非常に簡単です。 XSLT 1.0では、再帰的に呼ばれる名前付きテンプレートを記述して、必要な行番号の行に移動する必要があります。 –

+0

ああ、簡単に手助けできるなら、XSLT 2.0を使うことができます!私は別の質問を提出した! http://stackoverflow.com/questions/7952425/xml-to-html-xslt-copy-a-node-replacing-some-lines-and-adding-new-ones – MrMoog

関連する問題