2012-03-13 150 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