将 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

谢谢。

其实你并没有走多远

为了获取属性,您可以通过两种方式进行:

  1. 像节点是数组一样访问它$node['attributeName']
  2. 使用名为 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';
        }
    }
}