2016-07-07 62 views
1

我有一个XML文件,并希望用php将数据插入到数据库中。 XML文件的示例是:PHP致命错误:调用非对象上的成员函数item()

<shops> 
<shop> 
    <code>HM</code> 
    <name>Beauty</name> 
    <address> 
    <address_name>George St </address_name> 
    <city>New York</city> 
    </address> 
</shop> 
</shops> 

我想要的代码,名称,ADDRESS_NAME和城市值插入到我的PHP数据库。

我的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); 
} 

虽然在第一个for循环表店的数据正确加载,我获得了第二个循环以下错误:

PHP Fatal error: Call to a member function item() on a non-object

不任何人有任何想法如何解决这个问题,以获得元素地址的值?

非常感谢

+1

在'$ xmlDoc->负载卸下中'“' (“shops”.xml“);'**太多引号**单独突出显示的代码应该告诉您 – RiggsFolly

+0

我没有看到任何标签'number'或'siteid'。 –

+0

@MarcB编辑一个好主意吗?你确定这只是一个错字 – RiggsFolly

回答

1

您的XML没有<number>标签,这意味着此:

$name =$xmlObject->item($i)->getElementsByTagName('number')->item(0) 
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

将返回一个空数组,因为没有匹配的标签。

如果一个标签是可选的,那么你就不能认为它会在那里,你的DOM代码必须考虑到这一点:

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

这是一个错字错误。有没有办法获得地址名称和城市值? – lyev91

+0

是的,但你必须按照上面所示完成,并检查你的 - > find()和 - > get ...()调用是否成功。否则你的代码会一直不停地炸毁。 –

+0

谢谢你的回答。现在,我没有得到这个错误,但当我在代码中运行sql查询时,数据无法插入到我的表中。 – lyev91

相关问题