将XML导入MySQL数据库

时间:2015-03-02 21:43:32

标签: php mysql xml database import

我是编码新手,尝试从XML文件创建数据库,该文件是行业,公司名称和符号的列表。我已经看到了几个将数据导入MySQL的PHP​​代码示例,如下所示:

<?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和数据库,所以请原谅我,如果这是一个浪费你的时间的noobish问题。的xD

感谢。

1 个答案:

答案 0 :(得分:2)

你实际上并不是很远。

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

  1. 访问它,就像节点是数组$node['attributeName']
  2. 一样
  3. 使用名为attributes()的方法,您也可以执行:$node->attributes()->attributeName;
  4. 以下是您的代码更新:

    <?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';
            }
        }
    }