2012-03-13 3 views
3

У меня есть файл XSLT для преобразования данных из таблицы в инструкции INSERT. Так выглядит результатФорматирование документа 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?

Большое спасибо за ответы

EDIT

Я хотел бы иметь 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 всегда будет правильно привязываться к полям редактора, но все же будет правильно отступом. Конечно, проблемы возникнут, если позже вы перейдете к обычному редактору «padded-formatting». – pgfearo

ответ

5

Try

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

я

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

Вот именно то, что я хотел, спасибо большое :-) –

+4

+1. Обратите внимание, что значения должны быть обернуты по крайней мере в одинарных кавычках. Чтобы быть более безопасным для SQL-инъекций (и сломанного кода), одиночные кавычки в самих значениях должны быть экранированы, что потребует функции замены строки [как этот] (http://stackoverflow.com/a/8971550/18771). – Tomalak

Смежные вопросы