Импорт XML в базу данных MySQL

Я новичок в кодировании, пытаюсь создать базу данных из файла XML, который представляет собой список отраслей, названий компаний и символов. Я видел несколько примеров кода PHP, который импортирует данные в MySQL, который выглядел примерно так:

<?php

$url ="http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.industry%20where%20id%20in%20(select%20industry.id%20from%20yahoo.finance.sectors)&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url); //getting url contents

$data = curl_exec ($ch); //execule curl request
curl_close($ch);

$xml = simplexml_load_string($data);

$con=mysql_connect("localhost", "root", ""); //connect to server
mysql_select_db("symbol_list", $con) or die(mysql_error()); //select database

foreach ($xml -> item as $row) {
$industry = $row -> industry;
$company = $row -> name;
$symbol = $row -> symbol;

// perform sql query$sql = "INSERT INTO 'symbols_xml' ('industry', 'company', 'symbol')". "VALUES ('$industry', '$company', '$symbol')";

$result = mysql_query($sql);
if (!$result) {
echo 'MySQL ERROR';
} else {

echo 'SUCCESS';
}}

?>

Однако, потому что XML отформатирован так:

<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="215" yahoo:created="2015-03-02T20:58:57Z" yahoo:lang="en-US">
<results>
<industry id="112" name="Agricultural Chemicals">
<company name="Adarsh Plant Protect Ltd" symbol="ADARSHPL.BO"/>
<company name="African Potash Ltd" symbol="AFPO.L"/>
......
</industry>
<industry id="132" name="Aluminum">
<company name="AEI Corp Ltd" symbol="A18.SI"/>
<company name="Alcoa Inc" symbol="AA.BA"/>
<company name="Alcoa Inc" symbol="AA.MX"/>
......

Мой код PHP выше не может распознать значения …
Есть ли способ импортировать атрибуты (название отрасли, название компании и символ), чтобы они выглядели примерно так:

    #| Industry  | Company    | Symbol
-|----------- ------------ -------
1| Aluminium | Alcoa Inc. | AA.BA

и так далее..

Я только недавно начал изучать PHP и базы данных, так что, пожалуйста, прости меня, если это глупый вопрос, который потратил впустую ваше время. XD

Благодарю.

0

Решение

Вы были на самом деле не очень далеко.

Чтобы получить атрибут, вы можете сделать это двумя способами:

  1. Доступ к нему, как если бы узел был массивом $node['attributeName']
  2. Используйте метод с именем attribute (), и вы также можете сделать: $node->attributes()->attributeName;

Вот ваш код обновлен:

<?php

$url ="http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.industry%20where%20id%20in%20(select%20industry.id%20from%20yahoo.finance.sectors)&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url); //getting url contents

$data = curl_exec ($ch); //execule curl request
curl_close($ch);

$xml = simplexml_load_string($data);

$con=mysql_connect("localhost", "root", ""); //connect to server
mysql_select_db("symbol_list", $con) or die(mysql_error()); //select database

foreach ($xml->results->industry as $industryNode)
{
foreach ($industryNode->company as $companyNode)
{
$industry = (string) $industryNode['name'];
$company = (string) $companyNode['name'];
$symbol = (string) $companyNode['symbol'];

// perform sql query
$sql = "INSERT INTO 'symbols_xml' ('industry', 'company', 'symbol')". "VALUES ('$industry', '$company', '$symbol')";

$result = mysql_query($sql);
if (!$result)
{
echo 'MySQL ERROR';
}
else
{
echo 'SUCCESS';
}
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector