MYSQL-LOAD XML多个重复(重复)标签作为一个字符串

大软

<image></image>带有数据的多个重复标签“ 加载到一个<images>表单元的问题。

XML格式

<posts>
   <item>
      <id>1</id>
      <type>post</type>
      <url>www.url.com/1</url>
      <date>2016-06-15</date>
      <image>some url/1xxx.jpg</image>
      <image>some url/1yyy.jpg</image>
      <image>some url/1zzz.jpg</image>
   </item>
   <item>
      <id>2</id>
      <type>post</type>
      <url>www.url.com/2</url>
      <date>2016-06-12</date>
      <image>some url/2xxx.jpg</image>
      <image>some url/2yyy.jpg</image>
      <image>some url/2zzz.jpg</image>
      <image>some url/2www.jpg</image>
   </item>
   <item>
      <id>3</id>
      <type>post</type>
      <url>www.url.com/3</url>
      <date>2016-06-12</date>
      <image>some url/3fff.jpg</image>
   </item>
</posts>

代码

现在,它仅加载<image>来自<item>

LOAD XML local infile 'D:\\demo.xml' 
REPLACE 
INTO TABLE posts CHARACTER SET UTF8
ROWS IDENTIFIED BY '<item>'
(@id, @type, @url, @date, @image)
SET id=@id, type=@type, url=@url, date = str_to_date(@date, '%Y-%m'), images=@image;

如何将所有重复的<image>标签存储为图像VARCHAR或TEXT

完美的

考虑使用XSLT转换XML以item标准化images为一对多表。下面使用PHP运行XSLT,但是大多数通用语言都可以运行XSLT 1.0脚本,包括PHP,Perl,Python,Java,C#,VB。具体来说,该转换将使<image>标签不再<item>保持相对应,<id>并保留两组标签以上传到两个MySQL数据库表。

XSLT脚本(另存为.xsl文件)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/posts">
    <xsl:copy>
      <xsl:apply-templates select="item"/>
      <xsl:apply-templates select="item/image"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="item">
    <xsl:copy>
      <xsl:copy-of select="*[local-name()!='image']"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="item/image">
    <images>
      <itemid><xsl:value-of select="ancestor::item/id"/></itemid>
      <xsl:copy-of select="."/>
    </images>
  </xsl:template>

</xsl:stylesheet>

PHP脚本

<?php

$cd = dirname(__FILE__);

// LOAD XML AND XSL FILES
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->load('Original.xml');

$xslfile = new DOMDocument('1.0', 'UTF-8');
$xslfile->load('XSLT_Script.xsl');

// TRANSFORM XML with XSLT
$proc = new XSLTProcessor;
$proc->importStyleSheet($xslfile); 
$newXml = $proc->transformToXML($xml);

// SAVE TO FILE
file_put_contents('Output.xml', $newXml);

?>

输出 (图像包含项目ID)

<?xml version="1.0"?>
<posts>
  <item>
    <id>1</id>
    <type>post</type>
    <url>www.url.com/1</url>
    <date>2016-06-15</date>
  </item>
  <item>
    <id>2</id>
    <type>post</type>
    <url>www.url.com/2</url>
    <date>2016-06-12</date>
  </item>
  <item>
    <id>3</id>
    <type>post</type>
    <url>www.url.com/3</url>
    <date>2016-06-12</date>
  </item>
  <images>
    <itemid>1</itemid>
    <image>some url/1xxx.jpg</image>
  </images>
  <images>
    <itemid>1</itemid>
    <image>some url/1yyy.jpg</image>
  </images>
  <images>
    <itemid>1</itemid>
    <image>some url/1zzz.jpg</image>
  </images>
  <images>
    <itemid>2</itemid>
    <image>some url/2xxx.jpg</image>
  </images>
  <images>
    <itemid>2</itemid>
    <image>some url/2yyy.jpg</image>
  </images>
  <images>
    <itemid>2</itemid>
    <image>some url/2zzz.jpg</image>
  </images>
  <images>
    <itemid>2</itemid>
    <image>some url/2www.jpg</image>
  </images>
  <images>
    <itemid>3</itemid>
    <image>some url/3fff.jpg</image>
  </images>
</posts>

SQL (要上传两个表)

-- POSTS TABLE
LOAD XML local infile 'C:\\Path\\To\\Output.xml' 
REPLACE 
INTO TABLE posts CHARACTER SET UTF8
ROWS IDENTIFIED BY '<item>'
(@id, @type, @url, @date)
SET id=@id, type=@type, url=@url, date=str_to_date(@date, '%Y-%m');

-- IMAGES TABLE    
LOAD XML local infile 'C:\\Path\\To\\Output.xml' 
REPLACE 
INTO TABLE images CHARACTER SET UTF8
ROWS IDENTIFIED BY '<images>'
(@itemid, @image)
SET itemid=@itemid, image=@image;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在所有数据库mysql中用另一个字符串替换一个字符串

来自分类Dev

MYSQL-更新COLUMN中字符串的第一个字符

来自分类Dev

MySQL Join VIEW,将列连接成一个字符串

来自分类Dev

在MySQL查询中删除字符串中除第一个字符外的所有字符

来自分类Dev

多次向mysql中插入字符串,一次删除一次删除最后一个字符

来自分类Dev

MySQL和PHP在表中搜索一个字符串,但替换另一个字符串

来自分类Dev

如何使用PHP将MySQL结果连接到一个字符串中

来自分类Dev

如何仅更改mysql行上多个相同值的第一个字符串

来自分类Dev

通过从MySQL中的字符串中删除第一个字符来找到总和

来自分类Dev

表中的MYSQL查找值与一个字符串的多个可能的子字符串中的最佳匹配

来自分类Dev

MySQL:如何有效地选择只有一个字符差异的字符串?

来自分类Dev

如何选择一个字符串作为单独的行的一个字符的MySQL

来自分类Dev

在MySQL中替换字符串中的第一个字符

来自分类Dev

MySQL 5.7将JSON字符串的值连接为一个字符串

来自分类Dev

搜索字符串mysql db,它可以有空格,可以在另一个字符串中,依此类推

来自分类Dev

从外部文件向mysql终端输出一个字符串

来自分类Dev

使用MySQL函数将字符串的第一个字符移动到字符串的末尾

来自分类Dev

MySQL按多少顺序排序像一个字符串

来自分类Dev

MySQL Join VIEW,将列连接成一个字符串

来自分类Dev

使用PHP从一个字符串进行多个MySQL更新

来自分类Dev

MySQL添加一个字符串作为默认

来自分类Dev

把mysql_fetch_array的值放在一个字符串中,用分隔;

来自分类Dev

Mysql Load-dta-infile文件在每一行中仅包含一个封闭的字符串

来自分类Dev

表中的MYSQL查找值与一个字符串的多个可能的子字符串中的最佳匹配

来自分类Dev

一个字符串上的MySql IN运算符

来自分类Dev

如何从文本字段mysql的第二行中选择一个字符串

来自分类Dev

如何用 MySQL 中另一个字符串和一个字段的串联替换任何字符串

来自分类Dev

将多个mysql数据组合成一个字符串并用php显示

来自分类Dev

如果 column1 匹配一个字符串,我需要什么 mysql 函数?

Related 相关文章

  1. 1

    在所有数据库mysql中用另一个字符串替换一个字符串

  2. 2

    MYSQL-更新COLUMN中字符串的第一个字符

  3. 3

    MySQL Join VIEW,将列连接成一个字符串

  4. 4

    在MySQL查询中删除字符串中除第一个字符外的所有字符

  5. 5

    多次向mysql中插入字符串,一次删除一次删除最后一个字符

  6. 6

    MySQL和PHP在表中搜索一个字符串,但替换另一个字符串

  7. 7

    如何使用PHP将MySQL结果连接到一个字符串中

  8. 8

    如何仅更改mysql行上多个相同值的第一个字符串

  9. 9

    通过从MySQL中的字符串中删除第一个字符来找到总和

  10. 10

    表中的MYSQL查找值与一个字符串的多个可能的子字符串中的最佳匹配

  11. 11

    MySQL:如何有效地选择只有一个字符差异的字符串?

  12. 12

    如何选择一个字符串作为单独的行的一个字符的MySQL

  13. 13

    在MySQL中替换字符串中的第一个字符

  14. 14

    MySQL 5.7将JSON字符串的值连接为一个字符串

  15. 15

    搜索字符串mysql db,它可以有空格,可以在另一个字符串中,依此类推

  16. 16

    从外部文件向mysql终端输出一个字符串

  17. 17

    使用MySQL函数将字符串的第一个字符移动到字符串的末尾

  18. 18

    MySQL按多少顺序排序像一个字符串

  19. 19

    MySQL Join VIEW,将列连接成一个字符串

  20. 20

    使用PHP从一个字符串进行多个MySQL更新

  21. 21

    MySQL添加一个字符串作为默认

  22. 22

    把mysql_fetch_array的值放在一个字符串中,用分隔;

  23. 23

    Mysql Load-dta-infile文件在每一行中仅包含一个封闭的字符串

  24. 24

    表中的MYSQL查找值与一个字符串的多个可能的子字符串中的最佳匹配

  25. 25

    一个字符串上的MySql IN运算符

  26. 26

    如何从文本字段mysql的第二行中选择一个字符串

  27. 27

    如何用 MySQL 中另一个字符串和一个字段的串联替换任何字符串

  28. 28

    将多个mysql数据组合成一个字符串并用php显示

  29. 29

    如果 column1 匹配一个字符串,我需要什么 mysql 函数?

热门标签

归档