2017-05-25 6 views
2

を使用してMySQLにXMLデータを格納する:私は理解しようとしています何は、次のように私は、XMLファイル<strong>(exemel.xml)</strong>を持っているPHP

<XMLmeta> 
<Container> 

    <Group> 
     <Name>Persephone</Name> 
     <Order>1</Order> 
      <School> 
       <Schoolname>Best High School</Schoolname> 
       <Grade>10</Grade> 
      </School> 
    </Group> 

<Group> 
     <Name>John</Name> 
     <Order>2</Order> 
     <School> 
     <Schoolname>Wurst High School</Schoolname> 
     <Grade>9</Grade> 
     </School> 
</Group> 

</Container> 
</XMLmeta> 

はMYSQLにこのデータを追加する方法です。現在、私はXMLを選択する方法を知っていますが、値(名前、注文など)をどのくらい正確に選択するかは分かりません。このXMLデータをMYSQLに挿入する方法はわかりません。

私のコード

$danielbryan = new mysqli('localhost', 'root', '', 'database'); 
$url = 'exemel.xml'; 
$output = file_get_contents($url); 
$xml = simplexml_load_string($output); 

foreach ($xml){ 
//what do i do here// 
$insert = $danielbryan->prepare('INSERT INTO mytable() VALUES(?,?,?,?)'); 
$insert->execute(); 
} 

答えて

1

あなたはこれを達成するために$xml->Container->Groupを反復処理することができます。

SimpleXMLElementについてもっと読むことができますが、基本的にはXMLドキュメントを標準オブジェクトに解析します。

例:

<?php 
$entries = []; 
foreach ($xml->Container->Group as $group) { 
    $entry = []; 
    $entry['name'] = $group->Name->__toString(); 
    $entry['order'] = $group->Order->__toString(); 
    $entry['school_name'] = $group->School->Schoolname->__toString(); 
    $entry['grade'] = $group->School->Grade->__toString(); 
    $entries[] = $entry; 
} 

デモ:https://eval.in/805278

出力:

Array 
(
    [0] => Array 
     (
      [name] => Persephone 
      [order] => 1 
      [school_name] => Best High School 
      [grade] => 10 
     ) 

    [1] => Array 
     (
      [name] => John 
      [order] => 2 
      [school_name] => Wurst High School 
      [grade] => 9 
     ) 

) 

これは、あなたが、データベース・テーブルに挿入することができ、完全な単純な配列形式を提供します。

たぶん、このような何か:

foreach ($entries as $entry) { 
    $insert = $danielbryan->prepare('INSERT INTO mytable (`name`, `order`, `school_name`, `grade`) VALUES(?,?,?)'); 
    $insert->bind_param("sdsd", $entry['name'], $entry['order'], $entry['school_name'], $entry['grade']); 
    $insert->execute(); 
} 

この情報がお役に立てば幸いです。

関連する問題