Импортировать XML с атрибутами в mysql

У меня есть большой (~ 30Mb) XML-файл, например:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <LIC Version="2.0" Title="Products"> <Item> <Field Name="Filename">/root/_DOWNLOAD/Bird.txt</Field> <Field Name="Read_By">Lisa Hannigan</Field> <Field Name="Posit">Passenger</Field> </Item> <Item> <Field Name="Filename">D:\03\Strypers.pdf</Field> <Field Name="Read_By">Stryper</Field> <Field Name="Intensity">2</Field> <Field Name="IMG">78</Field> <Field Name="Rotate">0</Field> </Item> <Item> <Field Name="Filename">D:\Afriu.txt</Field> <Field Name="Read_By">Africano</Field> <Field Name="Posit">Canto Africano vol.1</Field> <Field Name="File_Resource">mp3</Field> </Item> <Item> <Field Name="Filename">D:\_VARIOUS\Knots.pdf</Field> <Field Name="Date">40624</Field> </Item> ... </LIC> 

Я хочу импортировать этот xml в базу данных mysql с помощью php-скрипта. Я использовал SIMPLEXML и xpath:

  $url = 'FILE.xml'; $xml = simplexml_load_file($url); $result = $xml->xpath("//Field[@Name]"); foreach { ... } 

Что мне нужно? Каков правильный «foreach» для создания массива для использования в mysql sql? Заметьте, что каждая строка (идентифицировать по «Элементу») не одинакова (не имеет одинакового «Имя поля»). Правильно ли использовать simplexml для более крупного файла? Спасибо за помощь!

Обновить

Это пример использования «foreach», я попробовал:

 $result = $xml->xpath("//Field[@Name]"); foreach($result as $key => $value) { echo $value['Name']."=".$value.","; } 

Теперь я хочу узнать, как создать строку для вставки в mysql

Сначала создайте таблицу, которая соответствует всем возможным полям в виде столбцов. Затем вы можете загрузить его с помощью запроса LOAD XML LOCAL INFILE .

 LOAD XML LOCAL INFILE 'file.xml' INTO TABLE person ROWS IDENTIFIED BY '<Item>'; 

Я пытаюсь ответить на мой вопрос.

 <?php $url = 'FILEXML'; $xml = simplexml_load_file($url); $i = 1; foreach($xml->xpath("/LIC/Item") as $docs) { foreach($docs->Field as $field) { $resultstr[] = $field["Name"]; } $sql_head = headquote($resultstr); $sql_ins = "INSERT INTO table_name ("; $sql_dec = ") VALUE ("; unset($resultstr); $fresult = (array)$docs; $fvalue = array_pop($fresult); $sql_val = numking($fvalue); $sql_end = ");"; $query_to_use_for_mysql = ($sql_ins.$sql_head.$sql_dec.$sql_val.$sql_end); unset($fresult); unset($fvalue); } ?> с <?php $url = 'FILEXML'; $xml = simplexml_load_file($url); $i = 1; foreach($xml->xpath("/LIC/Item") as $docs) { foreach($docs->Field as $field) { $resultstr[] = $field["Name"]; } $sql_head = headquote($resultstr); $sql_ins = "INSERT INTO table_name ("; $sql_dec = ") VALUE ("; unset($resultstr); $fresult = (array)$docs; $fvalue = array_pop($fresult); $sql_val = numking($fvalue); $sql_end = ");"; $query_to_use_for_mysql = ($sql_ins.$sql_head.$sql_dec.$sql_val.$sql_end); unset($fresult); unset($fvalue); } ?> с <?php $url = 'FILEXML'; $xml = simplexml_load_file($url); $i = 1; foreach($xml->xpath("/LIC/Item") as $docs) { foreach($docs->Field as $field) { $resultstr[] = $field["Name"]; } $sql_head = headquote($resultstr); $sql_ins = "INSERT INTO table_name ("; $sql_dec = ") VALUE ("; unset($resultstr); $fresult = (array)$docs; $fvalue = array_pop($fresult); $sql_val = numking($fvalue); $sql_end = ");"; $query_to_use_for_mysql = ($sql_ins.$sql_head.$sql_dec.$sql_val.$sql_end); unset($fresult); unset($fvalue); } ?> с <?php $url = 'FILEXML'; $xml = simplexml_load_file($url); $i = 1; foreach($xml->xpath("/LIC/Item") as $docs) { foreach($docs->Field as $field) { $resultstr[] = $field["Name"]; } $sql_head = headquote($resultstr); $sql_ins = "INSERT INTO table_name ("; $sql_dec = ") VALUE ("; unset($resultstr); $fresult = (array)$docs; $fvalue = array_pop($fresult); $sql_val = numking($fvalue); $sql_end = ");"; $query_to_use_for_mysql = ($sql_ins.$sql_head.$sql_dec.$sql_val.$sql_end); unset($fresult); unset($fvalue); } ?> 

И добавьте две функции:

 <?php function headquote($hdarray) { $hdata = array(); foreach ( $hdarray as $hdval ) { # Use backticks instead quotes! $hdata[] = "`$hdval`"; } $hdarray = implode($hdata, ','); return $hdarray; } function numking($input) { $data = array(); foreach ( $input as $value ) { $data[] = is_numeric($value) ? $value : "'".mysql_escape_string($value)."'"; } $input = implode($data, ','); return $input; } ?> 

Спасибо всем за помощь!

 $url = 'FILE.xml'; $xml = simplexml_load_file($url); for($i=0;$i<count($xml->Item);$i++) { print_r($xml->Item[$i]); }