将 XML 导入 MySQL 数据库
Import XML into MySQL database
我是编码新手,试图从 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']
- 使用名为 attributes() 的方法,您也可以这样做:
$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';
}
}
}
我是编码新手,试图从 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']
- 使用名为 attributes() 的方法,您也可以这样做:
$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';
}
}
}