2013-02-22 4 views
0

Я хотел бы импортировать некоторые элементы в большой XML-файл в таблицу mysql. Допустим, XML, содержит тысячи элементов, как:Как импортировать часть xml в таблицу mysql?

<CD> 
<TITLE>Empire Burlesque</TITLE> 
<ARTIST>Bob Dylan</ARTIST> 
<COUNTRY>USA</COUNTRY> 
<COMPANY>Columbia</COMPANY> 
<PRICE>10.90</PRICE> 
<YEAR>1985</YEAR> 
</CD> 

Но мне нужно только «TITLE» и «ГОД» каждого диска, ввозимой на компакт-диск таблицы в MySQL.

Я знаю, что существует mysql 5. + «LOAD XML» для получения данных из xml в mysql, но, по-видимому, он отображает весь xml, который не является тем, что мне нужно. Поэтому я ценю вашу помощь.

+0

[Что вы пробовали?] (HTTP : //www.whathaveyoutried.com/) См. [ask advice] (http://stackoverflow.com/questions/ask-advice), пожалуйста. –

+0

Какой язык программирования вы используете? Если вы используете это, у меня есть пример с образцом PHP. –

+0

@JohnConde, я попытался найти подходящий инструмент для работы. – supermario

ответ

2

Благодаря унизить omment, я просто понял, что самый простой способ, чтобы импортировать необходимые поля из XML в тузд таблицы использовать встроенный Load XML особенность MySQL, как:

LOAD XML LOCAL INFILE '/path/to/file.xml' INTO TABLE cds ROWS IDENTIFIED BY '<CD>'; 

Где вы ранее созданный таблицу cds по столбцам, которые вам нужны из file.xml.

Просто обратите внимание, что в MySQL 5.5+ вам нужно добавить флаг «-входной_файл --local» при вводе команды MySQL строки, в противном случае вы получите сообщение об ошибке 1148.

+0

Happy you found of solution! – abase

3

Используйте SimpleXML для загрузки XML и последующего округления значений. Мой пример использует simplexml_load_string() вы можете так же легко использовать simple_load_file()

Пример

$string = <<<XML 
<?xml version='1.0'?> 
<CDS> 
<CD> 
<TITLE>Empire Burlesque</TITLE> 
<ARTIST>Bob Dylan</ARTIST> 
<COUNTRY>USA</COUNTRY> 
<COMPANY>Columbia</COMPANY> 
<PRICE>10.90</PRICE> 
<YEAR>1985</YEAR> 
</CD> 
<CD> 
<TITLE>Empire Burlesque2</TITLE> 
<ARTIST>Bob Dylan</ARTIST> 
<COUNTRY>USA</COUNTRY> 
<COMPANY>Columbia</COMPANY> 
<PRICE>10.90</PRICE> 
<YEAR>1986</YEAR> 
</CD> 
</CDS> 
XML; 

$xml = simplexml_load_string($string); 

foreach ($xml as $cd) 
{ 
    // Your mysql functions for inserting goes here 
    echo $cd->TITLE . "<br>"; 
    echo $cd->YEAR . "<br>"; 
} 

See it in action

Будем надеяться, что дает вам точку в правильном направлении.

2

Таким образом, вы можете иметь такой подход, чтобы получить работу:

  • Преобразования большого файла XML со всеми элементами в файл меньшего размер XML с только требуемым элементом
    с помощью преобразования XSLT
  • чем с использованием XML синтаксические анализаторы, такие как SAXON, DOM или другие, анализируют новый небольшой XML-файл
  • Используйте некоторый язык программирования, который будет выполнять парсинг и базу данных для вас.
    Например, если вы планируете использовать java, вы можете использовать концепцию JAXB, чтобы развязать XML-объекты XML-объектам и заполнить их в базе данных.

Если вы можете предоставить дополнительную информацию об исходном XML и о том, какие элементы вы хотите от них, я могу отправить решение в JAVA для вас.

Надеюсь, это вам поможет.

Смежные вопросы