Я новичок в кодировании, пытаюсь создать базу данных из файла 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
Благодарю.
Вы были на самом деле не очень далеко.
Чтобы получить атрибут, вы можете сделать это двумя способами:
$node['attributeName']
$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';
}
}
}
Других решений пока нет …