PHP致命错误:对非对象调用成员函数item()

PHP致命错误:对非对象调用成员函数item(),php,mysql,Php,Mysql,我有一个XML文件,想用php将数据插入数据库。 XML文件的一个示例是: <shops> <shop> <code>HM</code> <name>Beauty</name> <address> <address_name>George St </address_name> <city>New York</city>

我有一个XML文件,想用php将数据插入数据库。 XML文件的一个示例是:

<shops>
 <shop>
   <code>HM</code>
   <name>Beauty</name>
   <address>
     <address_name>George St </address_name>
     <city>New York</city>
   </address>
 </shop>
</shops>
我想用php将code、name、address\u name和city的值插入我的数据库

我的php代码是:

$xmlDoc = new DOMDocument();
$xmlDoc->load("shops.xml");

$xmlObject = $xmlDoc->getElementsByTagName('shop');
$itemCount = $xmlObject->length;
for ($i=0; $i < $itemCount; $i++) {
  $name = $xmlObject->item($i)->getElementsByTagName('name')->item(0)->childNodes->item(0)->nodeValue;
  $code = $xmlObject->item($i)->getElementsByTagName('code')->item(0)->childNodes->item(0)->nodeValue;
  $sql  = "INSERT INTO `shop` (name,code) VALUES ('$name', '$code')";
  mysql_query($sql);
} 

$xmlObject_n = $xmlDoc->getElementsByTagName('address');
for ($i=0; $i < $itemCount; $i++) {
  $address_n = $xmlObject_n->item($i)->getElementsByTagName('address_name')->item(0)->childNodes->item(0)->nodeValue;
  $city      = $xmlObject_n->item($i)->getElementsByTagName('city')->item(0)->childNodes->item(0)->nodeValue;
  $sql_n     = "INSERT INTO `place` (address,city) VALUES ('$address_n', '$city')";
  mysql_query($sql_n);
}
$xmlDoc=newDOMDocument();
$xmlDoc->load(“shops.xml”);
$xmlObject=$xmlDoc->getElementsByTagName('shop');
$itemCount=$xmlObject->length;
对于($i=0;$i<$itemCount;$i++){
$name=$xmlObject->item($i)->getElementsByTagName('name')->item(0)->childNodes->item(0)->nodeValue;
$code=$xmlObject->item($i)->getElementsByTagName('code')->item(0)->childNodes->item(0)->nodeValue;
$sql=“插入'shop'(名称、代码)值('$name','$code')”;
mysql_查询($sql);
} 
$xmlObject_n=$xmlDoc->getElementsByTagName('address');
对于($i=0;$i<$itemCount;$i++){
$address\u n=$xmlObject\u n->item($i)->getElementsByTagName('address\u name')->item(0)->childNodes->item(0)->nodeValue;
$city=$xmlObject\u n->item($i)->getElementsByTagName('city')->item(0)->childNodes->item(0)->nodeValue;
$sql_n=“插入'place'(地址,城市)值('$address_n','$city')”;
mysql\u查询($sql\n);
}
当第一个for循环中的表shop的数据正确加载时,第二个循环出现以下错误:

PHP致命错误:对非对象调用成员函数item()

有人知道如何解决这个问题以获得元素地址的值吗

非常感谢您的XML中没有
标记,这意味着:

$name =$xmlObject->item($i)->getElementsByTagName('number')->item(0)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
将返回一个空数组,因为没有匹配的标记

如果标记是可选的,那么您不能假设它将在那里,并且您的DOM代码必须考虑到这一点:

$numbers = $xmlObject->item($i)->getElementsByTagName('number');
if ($numbers->length > 0) {
   $number = $numbers->item(0);
}

删除
$xmlDoc->load(“shops.xml”)中的中间
引用太多代码突出显示应该告诉您我没有看到任何标记
编号
siteid
@MarcB编辑是个好主意吗?你确定那只是一个玩笑吗typo@RiggsFolly:如果该输入错误出现在原始代码中,那将是一个致命的分析错误,并且您永远不会遇到“非对象”错误。对不起,输入错误。只有address元素的值未加载。这是一个打字错误。有没有办法获得地址和城市值?是的,但是你必须完全按照我上面所说的去做,并检查你的->查找()和->获取…()调用是否成功。否则你的代码会一直爆炸。谢谢你的回答。现在,我没有得到这个错误,但是当我在代码中运行sql查询时,数据无法插入到我的表中。然后开始调试:您所有的人都假设不会出现任何错误,因此您最初的致命错误。您不检查查询调用是否成功。换句话说,宇宙可能正在融化,你的代码将很高兴地观看乐高积木电影并唱“一切都很棒”