2012-03-13 110 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的多行?

非常感謝答案

編輯

我想有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 2012-03-13 10:04:56

+0

看我的編輯。事情是,我將在這段代碼上做一些調試,所以我想要很好地格式化:-) – 2012-03-13 10:22:57

+0

如果您要使用帶有'虛擬格式'的XML編輯器(不帶製表符/空格的自動縮進),那麼行長度將是一個非問題,因爲您的XML將始終正確包裝到編輯器邊距,但仍然正確縮進。當然,如果您稍後切換到傳統的「填充格式」編輯器,則會出現問題。 – pgfearo 2012-03-14 22:14:01

回答

5

嘗試

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

在XML間諜,與輸入

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

這正是我想要的,非常感謝:-) – 2012-03-13 10:40:10

+4

+1。請注意,這些值必須至少包含在單引號中。爲了更安全地防範SQL注入(和破壞的代碼),值本身的單引號必須轉義,這需要一個字符串替換函數[像這樣](http://stackoverflow.com/a/8971550/18771)。 – Tomalak 2012-03-13 10:41:04