Мне было предложено разобрать простой файл, который хранится в виде 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, и я думаю, что это направление, в котором я должен идти, но я просто понятия не имею.
Любая помощь или указатели были бы замечательными.
Мне лично нравится нормальное форматирование 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 />"; } }