2012-03-13 18 views
3

データを表からINSERT文に変換するためのXSLTファイルがあります。 出力はXSLT文書の書式設定

INSERT INTO some_table VALUES (Voda, Šenov); 

INSERT INTO some_table VALUES (Vorba, Vlčnov); 

のようになります。私のXSLTは、この三行

<xsl:for-each select="PAGE/ROWSET/ROW"> 
    INSERT INTO some_table VALUES (<xsl:value-of select="SURNAME"/>, <xsl:value-of select="CITY"/>); 
</xsl:for-each> 

が含まれており、ここで質問です 、私は実際に出力して書式設定を維持するために(私のテーブルには、20列のように持っている)と同じライン上に非常に多くの値を入れたくありません、どのように出力を同じに保ち、複数の行のINSERTに私の列をfor-eachに入れるかの方法がありますか?私はこの

<xsl:for-each select="PAGE/ROWSET/ROW"> 
    INSERT INTO some_table VALUES va1 ,val2 (
     <xsl:value-of select="SURNAME"/>, 
     <xsl:value-of select="CITY"/>); 
</xsl:for-each> 
+0

を取得しますか?パラメータを異なる行に置くことができない理由はありますか? – Bronumski

+0

私の編集を参照してください。私はこのコードでいくつかのデバッグを行いますので、好きなようにフォーマットしておきます:-) –

+0

XMLエディタで「仮想フォーマット」(タブ/スペースなしの自動インデント)を使用する場合は、行長あなたのXMLは常にエディタの余白に適切に折り返され、それでもなお適切にインデントされるため、問題はありません。もちろん、後で従来の「パディングフォーマット」エディタに切り替えると問題が発生します。 – pgfearo

答えて

5

ようfor-eachループはして、XMLのスパイで

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="text" version="1.0" encoding="UTF-8"/> 
    <xsl:template match="/"> 
     <xsl:for-each select="PAGE/ROWSET/ROW"> 
      <xsl:text>INSERT INTO some_table VALUES val1 ,val2 (</xsl:text> 
       <xsl:value-of select="SURNAME"/><xsl:text>, </xsl:text> 
       <xsl:value-of select="CITY"/><xsl:text>);</xsl:text> 
       <xsl:text>&#xA;</xsl:text> 
     </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

を試してみたいと思い

おかげでたくさんの回答のため

EDIT

入力

<?xml version="1.0" encoding="UTF-8"?> 
<PAGE> 
    <ROWSET> 
     <ROW> 
      <SURNAME>sn1</SURNAME> 
      <CITY>c1</CITY> 
     </ROW> 
     <ROW> 
      <SURNAME>sn2</SURNAME> 
      <CITY>c2</CITY> 
     </ROW> 
    </ROWSET> 
</PAGE> 

あなたが同じ行にそれらを配置する必要がありますなぜ私は

INSERT INTO some_table VALUES val1 ,val2 (sn1, c1); 
INSERT INTO some_table VALUES val1 ,val2 (sn2, c2); 
+0

まさに私が欲しかったことですね、ありがとう:-) –

+4

+1。値は、少なくとも一重引用符で囲む必要があることに注意してください。 SQLインジェクション(と壊れたコード)に対して安全であるためには、値そのものの一重引用符をエスケープする必要があります。これは、文字列置換関数[this like](http://stackoverflow.com/a/8971550/18771)を必要とします。 – Tomalak