0

編集できないソースから XML ファイルをインポートするスクリプトがあります (XML ファイルはサード パーティの会社から提供され、データは 1 時間ごとに変更されます - 彼らは XML ファイルを変更できないと言います)。

ソースのサンプルは次のとおりです。

<guns>
<gun id="0021">
<type>Air Pistol</type>
<mechanism>Single Stroke Pneumatic</mechanism>
<model>HW75</model>
<origin>German</origin>
<imageCount>2</imageCount>
<images>
  <image>
    <number>1</number> <fullPath>http://images.mydomain.com/Images/13/1306/13062/001/0021-1.jpg</fullPath>
  </image>
  <image>
    <number>2</number> <fullPath>http://images.mydomain.com/Images/13/1306/13062/001/0021-2.jpg</fullPath>
  </image>
</images>
</gun>

<gun id="0022">
<type>Air Pistol</type>
<mechanism>Single Stroke Pneumatic</mechanism>
<model>HW75</model>
<origin>German</origin>
</gun>
</guns>

フィールドを PHP にインポートしてから、Mysql に正常にインポートできます。

ただし、「フルパス」フィールドが存在しないことに気付くと、XML の読み取りを停止します。

インポートするレコードが 100 件ありますが、レコード番号 22 には画像がないため、21 番目のレコードの後で停止します。

これが私のphpコードです:

 $xmlDoc = new DOMDocument();
 $xmlDoc->load("xmlGuns.xml");
 $mysql_hostname = "localhost";
 $mysql_user = "************";
 $mysql_password = "********";
 $mysql_database = "*********";
 $bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password)
 or die("Oops some thing went wrong");
 mysql_select_db($mysql_database, $bd)
 or die("Oops some thing went wrong");

 mysql_query("TRUNCATE TABLE GunTable")
 or die("Oops some thing went wrong");
 mysql_query("ALTER TABLE GunTable AUTO_INCREMENT = 1")
 or die("Oops some thing went wrong");




  $x=$xmlDoc->getElementsByTagName('gun');
  for ($i=0; $i<=15000; $i++)
    {
    $type=$x->item($i)->getElementsByTagName('type')
    ->item(0)->childNodes->item(0)->nodeValue;
    $mechanism=$x->item($i)->getElementsByTagName('mechanism')
    ->item(0)->childNodes->item(0)->nodeValue;
    $model=$x->item($i)->getElementsByTagName('model')
    ->item(0)->childNodes->item(0)->nodeValue;
    $origin=$x->item($i)->getElementsByTagName('origin')
    ->item(0)->childNodes->item(0)->nodeValue;
    $fullPath=$x->item($i)->getElementsByTagName('fullPath')
    ->item(0)->childNodes->item(0)->nodeValue;

    $insert = "INSERT INTO GunTable (type, mechanism,  model, origin, fullpath) VALUES ('$type', '$mechanism','$model','$origin','$fullpath')";
    $add_member = mysql_query($insert);
    }

画像のないレコードに到達すると、レコード番号21の処理後に次のエラーが表示されます...

**注意: 31 行目で /mydomain.com/import.php の非オブジェクトのプロパティを取得しようとしています

致命的なエラー: 31 行目の /mydomain.com/import.php の非オブジェクトに対するメンバー関数 item() の呼び出し**

31 行目: $fullPath=$x->item($i)->getElementsByTagName('fullPath')

誰でも助けてくれますか!私は PHP には問題ありませんが、この DOMDocument は私にとって初めてのことです。


解決:

ふぅ…なんとか解決しました。

   if(isset($x->item($i)->getElementsByTagName('fullPath')->item(0)->childNodes)) {

   $fullPath=$x->item($i)->getElementsByTagName('fullPath')
   ->item(0)->childNodes->item(0)->nodeValue;

   } else { $fullPath = "No Image"; }

画像の URL が MySQL データベースに挿入されないという問題があります... EEK!

4

0 に答える 0