Анализ XML-данных с использованием php для размещения в базе данных mysql

Мне было предложено разобрать простой файл, который хранится в виде XML-файла, данные затем должны быть помещены в базу данных mysql.

Однако я абсолютно не понимаю, что делать, и после поиска в Интернете все приведенные примеры кажутся слишком сложными для моей проблемы или не являются правильным решением. Файл XML выглядит так:

<shop> <products> <product id="1" name="Cornetto" price="1.20" description="Traditional Cornetto" /> <product id="2" name="Smarties" price="1.00" description="Smarties Icecream" /> </products> <stocks> <stock id="1" amount="242" price="pounds" /> <stock id="2" amount="11" price="pounds" /> </stocks> 

Я пробовал смотреть на SimpleXML, и я думаю, что это направление, в котором я должен идти, но я просто понятия не имею.

Любая помощь или указатели были бы замечательными.

Solutions Collecting From Web of "Анализ XML-данных с использованием php для размещения в базе данных mysql"

Мне лично нравится нормальное форматирование XMl, поэтому я изменил его, так как его немного читаем, но вы можете его использовать:

 $xmlstr = <<<XML <?xml version='1.0' standalone='yes'?> <shop> <products> <product> <id>1</id> <name>Cornetto</name> <price>1.20</price> <description>Traditional Cornetto</description> </product> <product> <id>2</id> <name>Smarties</name> <price>1.00</price> <description>Smarties Icecream</description> </product> </products> <stocks> <stock> <id>1</id> <amount>242</amount> <price>pounds</price> </stock> <stock> <id>2</id> <amount>11</amount> <price>pounds</price> </stock> </stocks> </shop> XML; 

Обрабатывающая часть:

 $xml = new SimpleXMLElement($xmlstr); echo 'single value: <br />'; echo $xml->products->product[0]->id; // get single value echo '<br /><br />'; //Loop trough multiple products echo 'multiple values: <br />'; foreach($xml->products->product as $product) { echo $product->id.' - '; echo $product->name.' - '; echo $product->price.' - '; echo $product->description; echo '<br/>'; } 

Предполагая, что файл называется data.xml

$string = file_get_contents('data.xml') читает весь файл в $string .

$xml = new SimpleXMLElement($string); анализирует эту строку и преобразует ее в дерево объектов, аналогичное фактическому документу. Так что если это документ –

 <root> <b> <c>first</c> <c>second</c> </b> </root> 

Объект SimpleXMLElement будет использоваться как:

 $xml->b // gets all children of b (c[0] and c[1]) print $xml->b->c[0] // gets the first c, will print "first" 

Вы можете использовать, например, SimpleXMLElement и xpath

 <?php $xmlStr = <<<EOF <?xml version="1.0"?> <shop> <products> <product id="1" name="Cornetto" price="1.20" description="Traditional Cornetto" /> <product id="2" name="Smarties" price="1.00" description="Smarties Icecream" /> </products> <stocks> <stock id="1" amount="242" price="pounds" /> <stock id="2" amount="11" price="pounds" /> </stocks> </shop> EOF; $xml=new SimpleXMLElement($xmlStr); // get product line with xpath for example $products=$xml->xpath("/shop/products/product"); if ($products) { // loop over each product node foreach ($products as $product) { // do whatever you want with the data echo("id=>".$product["id"].", name=>".$product["name"]."<br/>"); } } // same for stock // get product line with xpath for example $stocks=$xml->xpath("/shop/stocks/stock"); if ($stocks) { // loop over each product node foreach ($stocks as $stock) { // do whatever you want with the data echo("id=>".$stock["id"].", amount=>".$stock["amount"]."<br/>"); } } ?> 
 $xml = simplexml_load_file($filename); foreach($xml->product as $product) { foreach($product->attributes() as $name => $attribute) { echo "$name = $attribute"; } } 
 $xml = simplexml_load_file($filename); foreach($xml->products->product as $not) { foreach($not->attributes() as $a => $b) { echo $a,'="',$b,"\"<br />"; } }