格式化XSLT文档

Pet*_*sik 3 xml xslt text

我有一个XSLT文件,用于将数据从表转换为INSERT语句.所以输出看起来像

INSERT INTO some_table VALUES (Voda, Šenov);

INSERT INTO some_table VALUES (Vorba, Vl?nov);
Run Code Online (Sandbox Code Playgroud)

这对我来说很好.我的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>
Run Code Online (Sandbox Code Playgroud)

这是一个问题,我真的不想在同一行上放置这么多的值(我的表有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>
Run Code Online (Sandbox Code Playgroud)

Mae*_*o13 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>
Run Code Online (Sandbox Code Playgroud)

在XML Spy中,带输入

<?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>
Run Code Online (Sandbox Code Playgroud)

我明白了

INSERT INTO some_table VALUES val1 ,val2 (sn1, c1);
INSERT INTO some_table VALUES val1 ,val2 (sn2, c2);
Run Code Online (Sandbox Code Playgroud)

  • +1.请注意,值必须至少用单引号括起来.为了更安全地防止SQL注入(和破坏的代码),必须对值本身中的单引号进行转义,这需要字符串替换函数[如此](http://stackoverflow.com/a/8971550/18771). (4认同)