2010-04-13 114 views
1

我想更好地了解需要这样的早餐食谱一个采取一个XML文档的基本步骤导出一个XML文档作为关系数据库的说明...转换使用XSLT

<?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数据库,创建了两个连接表:

  • :breakfast_menu
    • 场:menu_item_id
    • 场:food_id
  • 食品
    • 场:food_id
    • 场:
    • 现场:价格
    • 场:描述
    • 场:卡路里

如果有这个,你知道的在线教程,我会在学习有趣更多,以及。

谢谢。

+0

XSLT可以用来产生必要的INSERT INTO SQL对表的填充命令。 但是,提供的XML没有与'menu_item_id'有关的任何数据。 – 2010-04-13 18:36:22

+0

您是否有这个XSLT的外观样例? – Yaaqov 2010-04-13 19:49:53

+0

呃,是否有某些原因导致你无法直接导出,即将你的MySQL表格连接到Access并且只是追加数据? – 2010-04-14 00:45:05

回答

2

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> 
+0

关于实际将数据*从* XML *转换为* SQL的更具体建议? – Yaaqov 2010-04-13 19:49:22

+0

非常清楚 - 感谢您的指导。 – Yaaqov 2010-04-13 21:31:33

+0

备注:如果任何XML文本字段包含单引号,则XSL显然会中断。我还建议用常规编程语言和XML和数据库的一些概念来完成所有这些工作。 – Tomalak 2010-04-14 09:12:14