如何从XML文件中将字段导入列

时间:2013-07-04 15:22:55

标签: mysql xml

我有一个如下所示的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<article lang="">
  <para/>
  <para/>
  <informaltable frame="all">
    <tgroup cols="2.4"><tbody><row><entry namest="c1" nameend="c3"><para>Informe No. 08- 1696 </para></entry><entry namest="c4" nameend="c5"><para>Pagina 1 de 1</para></entry></row><row><entry namest="c1" nameend="c3"><para>Apellidos:   COLINA</para></entry><entry namest="c4" nameend="c5"><para>Nombres:   GELA</para></entry></row><row><entry><para>Edad: 50a</para></entry><entry><para>Sexo:  F</para></entry><entry><para>Historia No.: </para></entry><entry><para>Entrada: 15-01-2008</para></entry><entry><para>Salida: 17-01-2008</para></entry></row><row><entry namest="c1" nameend="c3"><para>Remitente:    Dr. Mano Paz</para></entry><entry namest="c4" nameend="c5"><para>Institución: Torre Sur</para></entry></row><row><entry namest="c1" nameend="c5"><para>Origen y Naturaleza del Material:    Orina (muestra A, B y C )</para></entry></row></tbody></tgroup>
  </informaltable>
  <para/>
  <para/>
  <para/>
  <para>INFORME CITOLOGICO</para>
  <para/>
  <para>A.- MACROSCOPICO:   Se recibe envase conteniendo 15 cc de orina, el cual se centrifuga, se extiende en láminas portaobjetos y se colorea para evaluación microscópica.</para>
  <para/>
  <para>        RESULTADO:  FROTIS CITOLOGICO NEGATIVO.        </para>
  <para/>
  <para>B.- MACROSCOPICO:   Se recibe envase conteniendo 14 cc de orina, el cual se centrifuga, se extiende en láminas portaobjetos y se colorea para evaluación microscópica.</para>
  <para/>
  <para>        RESULTADO:  FROTIS CITOLOGICO NEGATIVO.        </para>
  <para/>
  <para>C.- MACROSCOPICO:   Se recibe envase conteniendo 13 cc de orina, el cual se centrifuga, se extiende en láminas portaobjetos y se colorea para evaluación microscópica.</para>
  <para/>
  <para>        RESULTADO:  FROTIS CITOLOGICO NEGATIVO.        </para>
  <para/>
  <para/>
  <para/>
  <para>                                                </para>
  <para/>
</article>

我需要使用<para>MYSQL LOAD导入其中包含信息的MYSQL XML代码,并将每个<para>的内容放入SO列中导入的XML文件我得到1行。最终结果看起来像这样:

Column1 - - - Column2 - - - Column3 - - - Column4

1st Para - - -2nd Para - -  3rd Para - -  4th Para

等等所有<para>代码。现在是默认行为,如果我尝试导入此文件,每个<para>内容将连续而不是列,为同一个文件创建20行(每行中的每个信息)而不是每次导入同一行但在不同列上的字段。如何设置它以便它们进入每列而不是行。

以下是它现在的样子:

enter image description here

我想要的是每个文件都在一列中,而不是图像中所示的一行。知道这将对大约50.000多个文件进行,因此每个XML文件应该是一行,并且它的字段是一列,而不是该XML的每个字段成为一行。基本上,所有字段都应该放在一列中,只占一行,以便1行= 1个XML文件。

1 个答案:

答案 0 :(得分:1)

您说您已经连续添加了<para>个,因此,在将每个文件加载到para1列后,您可以尝试:

SELECT CONCAT(
  'SELECT ', GROUP_CONCAT('"',MID(REPLACE(para1, '.', ''),INSTR(REPLACE(para1, '.', ''),':')+1),'"' ' AS `', LEFT(REPLACE(para1, '.', ''),INSTR(REPLACE(para1, '.', ''),':')-1),'`' SEPARATOR ','), 
  ' FROM `para` LIMIT 0,1')
INTO @qry
FROM `para`;

PREPARE stmt FROM @qry;
EXECUTE stmt;

Try it in SQLFIDDLE

输出:

EDAD  |  SEXO  |  HISTORIA NO  |  ENTRADA  |  SALIDA  |  REMITENTE  |  INSTITUCION  | ORIGEN Y NATURALEZA DEL MATERIAL |

  50a |      F |               |15-01-2008 |17-01-2008|             |               |        Orina (muestra A, B y C)  |