Объяснение преобразования экспорта XML-документа в реляционную базу данных с использованием XSLT - PullRequest
1 голос
/ 13 апреля 2010

Я бы хотел лучше понять основные шаги, необходимые для получения 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>

И «экспортировать», скажем, базу данных Access или MySQL с помощью XSLT, создав две соединенные таблицы:

  • Таблица : завтрак_меню
    • Поле: menu_item_id
    • Поле: food_id
  • Таблица : еда
    • Поле: food_id
    • Поле: Имя
    • Поле: цена
    • Поле: описание
    • Поле: калорий

Если есть онлайн-уроки по этому вопросу, о которых вы знаете, мне также было бы интересно узнать больше.

Спасибо.

1 Ответ

2 голосов
/ 13 апреля 2010

XSLT преобразует дерево документа в другое дерево документа. Как я знаю, нет прямых соединителей с MySQL, которые могли бы вставить преобразованные данные в MYSQL.

Другим вариантом может быть создание XML, который может быть импортирован MySQL.

mysqldump Утилита принимает опцию --xml, которая позволяет выгружать данные в формате XML (чтобы вы могли преобразовать свои данные в формат). К сожалению, загрузка данных из файла обратно - это хитрость, которая доступна только из 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...