【问题标题】:Explanation of converting exporting an XML document as a relational database using XSLT使用 XSLT 转换将 XML 文档导出为关系数据库的说明
【发布时间】:2010-04-13 16:59:31
【问题描述】:

我想更好地了解获取像此早餐菜单这样的 XML 文档所需的基本步骤...

<?xml version="1.0" encoding="ISO-8859-1"?>
<breakfast_menu>
    <food>
        <name>Belgian Waffles</name>
        <price>$5.95</price>
        <description>two of our famous Belgian Waffles with plenty of real maple syrup</description>
        <calories>650</calories>
    </food>
    <food>
        <name>Strawberry Belgian Waffles</name>
        <price>$7.95</price>
        <description>light Belgian waffles covered with strawberries and whipped cream</description>
        <calories>900</calories>
    </food>
    <food>
        <name>Berry-Berry Belgian Waffles</name>
        <price>$8.95</price>
        <description>light Belgian waffles covered with an assortment of fresh berries and whipped cream</description>
        <calories>900</calories>
    </food>
    <food>
        <name>French Toast</name>
        <price>$4.50</price>
        <description>thick slices made from our homemade sourdough bread</description>
        <calories>600</calories>
    </food>
    <food>
        <name>Homestyle Breakfast</name>
        <price>$6.95</price>
        <description>two eggs, bacon or sausage, toast, and our ever-popular hash browns</description>
        <calories>950</calories>
    </food>
</breakfast_menu>

然后将其“导出”为使用 XSLT 的 Access 或 MySQL 数据库,创建两个连接表:

  • 餐桌:早餐菜单
    • 字段:menu_item_id
    • 字段:food_id
  • 餐桌食物
    • 字段:food_id
    • 字段:姓名
    • 字段:价格
    • 字段:说明
    • 字段:卡路里

如果您知道有这方面的在线教程,我也会有兴趣了解更多信息。

谢谢。

【问题讨论】:

  • XSLT 可用于为填充表生成必要的 INSERT INTO SQL 命令。但是,提供的 XML 没有任何与menu_item_id相关的数据
  • 您有这个 XSLT 外观的示例吗?
  • 呃,有什么原因你不能直接导出,即将你的 MySQL 表链接到 Access 并附加数据?

标签: sql mysql ms-access xslt


【解决方案1】:

XSLT 将一个文档树转换为另一个文档树。据我所知,没有直接连接到 MySQL 的连接器可以将转换后的数据插入 MYSQL。

另一种选择可能是生成可由 MySQL 导入的 XML。

mysqldump 实用程序接受 --xml 选项,该选项允许以 XML 格式转储数据(因此您可以将数据转换为该格式)。不幸的是,从文件中加载数据是一个技巧available only from MySQL 5.1。在 MySQL 6.0.3 中,虽然出现了一个新的 LOAD XML 语句,可用于此目的。

我相信,通过使用 XML 阅读器读取 XML 并使用任何现代编程语言中的标准数据库连接器逐行插入数据,可以轻松解决该任务。

UPD

xsl 可能如下所示:

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

    <xsl:template match="breakfast_menu">
        <xsl:apply-templates mode="insert-to-food" select="food" />
        <xsl:apply-templates mode="insert-to-breakfast_menu" select="food" />
    </xsl:template>

    <xsl:template mode="insert-to-food" match="food">
        <xsl:text>INSERT INTO food(</xsl:text>
        <xsl:number />
        <xsl:text>, '</xsl:text>
        <xsl:value-of select="name" />
        <xsl:text>', '</xsl:text>
        <xsl:value-of select="price" />
        <xsl:text>', '</xsl:text>
        <xsl:value-of select="description" />
        <xsl:text>', </xsl:text>
        <xsl:value-of select="calories" />
        <xsl:text>);&#xA;</xsl:text>
    </xsl:template>

    <xsl:template mode="insert-to-breakfast_menu" match="food">
        <xsl:text>INSERT INTO breakfast_menu(1, </xsl:text>
        <xsl:number />
        <xsl:text>);&#xA;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

【讨论】:

  • 关于将数据 XML 转换为 SQL的任何更具体的建议?
  • 旁注:如果任何 XML 文本字段包含单引号,XSL 显然会中断。我还建议使用带有 XML 和数据库概念的常规编程语言来完成所有这些工作。
猜你喜欢
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多