0

XML ドキュメントから連想配列へのデータの変換を手伝ってくれる人はいますか? XML 構造を考えると、問題が発生しています。コードはループしますが、同じノード (xml ファイルの最初のノード) を繰り返します。このコードは、データベースに 4 行 (すべて同じ行) を挿入します。コードをxmlの他のノードに移動する方法。

////////////////////////////XMLファイル////////////////// //////////////////////////////

<?xml version="1.0" encoding="utf-8"?>
<root>
   <property>   
        <id>2</id>
        <type>2</type>
        <rent_type>1</rent_type>
        <cid>1</cid>
        <locid>2</locid>
        <stid>2</stid>
        <cnid>2</cnid>
        <locality>2</locality>
        <state>costa blanca</state>
        <country>spain</country>
        <office_id>1</office_id>
        <mls_id>2d2</mls_id>
        <mls_agent>2</mls_agent>
        <viewad>1</viewad>
        <viewbooking>1</viewbooking>
        <unit_num>mmmmm</unit_num>
        <street_num>nnnn</street_num>
        <address2>mmmbbbbbbbbbbbbbbb b bbm</address2>
        <postcode></postcode>
        <county>dd</county>
        <price>222222222.00</price>
        <showprice>1</showprice>
        <freq>0</freq>
        <bond>0.00</bond>
        <closeprice>2222222222.00</closeprice>
        <priceview>3</priceview>
        <age>5</age>
        <landtype>1</landtype>
        <frontage></frontage>
        <depth></depth>
    </property>
    <property>
        <id>3</id>
        <type>2</type>
        <rent_type>0</rent_type>
        <cid>1</cid>
        <locid>0</locid>
        <stid>0</stid>
        <cnid>0</cnid>
        <locality></locality>
        <state></state>
        <country></country>
        <office_id></office_id>
        <mls_id>3d3</mls_id>
        <mls_agent></mls_agent>
        <viewad>0</viewad>
        <viewbooking>0</viewbooking>
        <unit_num>mmmmm</unit_num>
        <street_num>nnnn</street_num>
        <address2>mmmm</address2>
        <postcode></postcode>
        <county>dd</county>
        <price>3333333333.00</price>
        <showprice>1</showprice>
        <freq>0</freq>
        <bond>0.00</bond>
        <closeprice>333333.00</closeprice>
        <priceview></priceview>
        <age></age>
        <landtype></landtype>
        <frontage></frontage>
        <depth></depth>
     </property>
    <property>
        <id>4</id>
        <type>0</type>
        <rent_type>0</rent_type>
        <cid>1</cid>
        <locid>0</locid>
        <stid>0</stid>
        <cnid>0</cnid>
        <locality></locality>
        <state></state>
        <country></country>
        <office_id></office_id>
        <mls_id>4d4</mls_id>
        <mls_agent></mls_agent>
        <viewad>0</viewad>
        <viewbooking>0</viewbooking>
        <unit_num>mmmmm</unit_num>
        <street_num>nnnn</street_num>
        <address2>mmmm</address2>
        <postcode></postcode>
        <county>dd</county>
        <price>444444444444444.00</price>
        <showprice>1</showprice>
        <freq>0</freq>
        <bond>0.00</bond>
        <closeprice>4444444444444444444.00</closeprice>
        <priceview></priceview>
        <age></age>
        <landtype></landtype>
        <frontage></frontage>
        <depth></depth>
    </property>
   <property>
        <id>5</id>
        <type>0</type>
        <rent_type>0</rent_type>
        <cid>1</cid>
        <locid>0</locid>
        <stid>0</stid>
        <cnid>0</cnid>
        <locality></locality>
        <state></state>
        <country></country>
        <office_id></office_id>
        <mls_id>5d5</mls_id>
        <mls_agent></mls_agent>
        <viewad>0</viewad>
        <viewbooking>0</viewbooking>
        <unit_num>mmmmm</unit_num>
        <street_num>nnnn</street_num>
        <address2>mmmm</address2>
        <postcode></postcode>
        <county>dd</county>
        <price>55555555555555.00</price>
        <showprice>1</showprice>
        <freq>0</freq>
        <bond>0.00</bond>
        <closeprice>55555555555.00</closeprice>
        <priceview></priceview>
        <age></age>
        <landtype></landtype>
        <frontage></frontage>
        <depth></depth>
    </property>
</root> 

/////////////////////////////PHPコード////////////////// //////////////////////////////////

ini_set('display_errors','On');

echo "starting<br />";

//mysql connection
...
echo "connected to DB<br /><br />";

$url = "s_property1.xml";
    $xmlfgc = file_get_contents($url);
    $xmlitem = new SimpleXMLElement($xmlfgc);
    echo "xml loaded<br /><br />";

foreach ($xmlitem->property as $xml) {
//for ($i=0;$i ;){
    $id          = mysql_real_escape_string($xmlitem->property->id);
    $type        = mysql_real_escape_string($xmlitem->property->type);
    $rent_type   = mysql_real_escape_string($xmlitem->property->rent_type);
    $cid         = mysql_real_escape_string($xmlitem->property->cid);
    $locid       = mysql_real_escape_string($xmlitem->property->locid);
    $stid        = mysql_real_escape_string($xmlitem->property->stid);
    $cnid        = mysql_real_escape_string($xmlitem->property->cnid);
    $locality    = mysql_real_escape_string($xmlitem->property->locality);
    $state       = mysql_real_escape_string($xmlitem->property->state);
    $country     = mysql_real_escape_string($xmlitem->property->country);
    $office_id   = mysql_real_escape_string($xmlitem->property->office_id);
    $mls_id      = mysql_real_escape_string($xmlitem->property->mls_id);
    $mls_agent   = mysql_real_escape_string($xmlitem->property->mls_agent);
    $viewad      = mysql_real_escape_string($xmlitem->property->viewad);
    $viewbooking = mysql_real_escape_string($xmlitem->property->viewbooking);
    $unit_num    = mysql_real_escape_string($xmlitem->property->unit_num);
    $street_num  = mysql_real_escape_string($xmlitem->property->street_num);
    $address2    = mysql_real_escape_string($xmlitem->property->address2);
    $postcode    = mysql_real_escape_string($xmlitem->property->postcode);    
    $county      = mysql_real_escape_string($xmlitem->property->county);
    $price       = mysql_real_escape_string($xmlitem->property->price);
    $showprice   = mysql_real_escape_string($xmlitem->property->showprice);
    $freq        = mysql_real_escape_string($xmlitem->property->freq);
    $bond        = mysql_real_escape_string($xmlitem->property->bond);
    $closeprice  = mysql_real_escape_string($xmlitem->property->closeprice);    
    $priceview   = mysql_real_escape_string($xmlitem->property->priceview);
    $age         = mysql_real_escape_string($xmlitem->property->age);
    $landtype    = mysql_real_escape_string($xmlitem->property->landtype);
    $frontage    = mysql_real_escape_string($xmlitem->property->frontage);
    $depth       = mysql_real_escape_string($xmlitem->property->depth);

echo "xml parsed<br /><br />";

$xmldata = array();

$xmldata[] = '("' . $id. '", "' . $type . '", "' . $rent_type. '", "' . $cid . '", "' . $locid . '", "' . $stid . '", "' . $cnid . '", 
       "' . $locality . '", "' . $state . '", "' . $country . '", "' . $office_id . '", "' . $mls_id . '", "' . $mls_agent . '",
       "' . $viewad . '", "' . $viewbooking . '", "' . $unit_num . '", "' . $street_num . '", "' . $address2 . '", "' . $postcode . '",
       "' . $county . '", "' . $price . '", "' . $showprice . '", "' . $freq . '", "' . $bond . '", "' . $closeprice . '",
       "' . $priceview . '" ,"' . $age . '", "' . $landtype . '", "' . $frontage . '", "' . $depth . '")';

//insert into databse                     
$query = 'INSERT INTO gitfd_ezrealty ( id, type, rent_type, cid, locid, stid, cnid, locality, state, country, office_id, mls_id, mls_agent,
               viewad, viewbooking, unit_num, street_num, address2, postcode, county, price, showprice, freq, bond, closeprice, priceview,
               age, landtype, frontage, depth)
    VALUES' . implode(',', $xmldata);

    mysql_query($query) or die(mysql_error());

    echo "inserted into mysql<br /><br />";

    print_r($xmldata);

}

?>

しかし、id は auto_increment です。

このコードの出力 = db への 4 行 + {DB への接続の開始

xml がロードされました

xml が解析されました

mysqlに挿入

配列 ( [0] => ("", "2", "1", "1", "2", "2", "2", "2", "コスタブランカ", "スペイン", "1 "、"2d2"、"2"、"1"、"1"、"mmmm"、"nnnn"、"mmmbbbbbbbbbbbbbbbb bbm"、""、"dd"、"222222222.00"、"1"、"0" 、「0.00」、「2222222222.00」、「3」、「5」、「1」、「」、「」) ) xml 解析済み

mysqlに挿入

配列 ( [0] => ("", "2", "1", "1", "2", "2", "2", "2", "コスタブランカ", "スペイン", "1 "、"2d2"、"2"、"1"、"1"、"mmmm"、"nnnn"、"mmmbbbbbbbbbbbbbbbb bbm"、""、"dd"、"222222222.00"、"1"、"0" 、「0.00」、「2222222222.00」、「3」、「5」、「1」、「」、「」) ) xml 解析済み

mysqlに挿入

配列 ( [0] => ("", "2", "1", "1", "2", "2", "2", "2", "コスタブランカ", "スペイン", "1 "、"2d2"、"2"、"1"、"1"、"mmmm"、"nnnn"、"mmmbbbbbbbbbbbbbbbb bbm"、""、"dd"、"222222222.00"、"1"、"0" 、「0.00」、「2222222222.00」、「3」、「5」、「1」、「」、「」) ) xml 解析済み

mysqlに挿入

配列 ( [0] => ("", "2", "1", "1", "2", "2", "2", "2", "コスタブランカ", "スペイン", "1 "、"2d2"、"2"、"1"、"1"、"mmmm"、"nnnn"、"mmmbbbbbbbbbbbbbbbb bbm"、""、"dd"、"222222222.00"、"1"、"0" 、「0.00」、「2222222222.00」、「3」、「5」、「1」、「」、「」))

挿入されたレコード: 1 }

4

3 に答える 3

0

リンクでクラスを見つけることができます。XML2Arrayこれにより、xml を配列に、またはその逆に簡単に変換できます。Xml2Array

使用法:

$array = XML2Array::createArray(file_get_contents('path/to/xml-file.xml'));
于 2013-11-07T15:16:06.030 に答える
0

http://php.net/manual/en/function.simplexml-load-file.phpを使用します

$xml = simplexml_load_file('test.xml');

オブジェクトをループできるはずです。

または、XML ファイルをロードするための MySQL ソリューションを確認してください: http://dev.mysql.com/doc/refman/5.5/en/load-xml.html

于 2013-11-07T15:16:10.220 に答える
0
$id          = mysql_real_escape_string($xmlitem->property->id);

使用する

$id          = mysql_real_escape_string($xml->id);

代わりは

于 2013-11-07T15:12:44.373 に答える