实际上,我正在尝试将xml导入mysql
for ($i=0; $i < $itemCount; $i++) {
$title = $xmlObject->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
$link = $xmlObject->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
$image_link = $xmlObject->item($i)->getElementsByTagName('image_link')->item(0)->childNodes->item(0)->nodeValue;
$price = $xmlObject->item($i)->getElementsByTagName('price')->item(0)->childNodes->item(0)->nodeValue;
$brand = $xmlObject->item($i)->getElementsByTagName('brand')->item(0)->childNodes->item(0)->nodeValue;
$availability = $xmlObject->item($i)->getElementsByTagName('availability')->item(0)->childNodes->item(0)->nodeValue;
$id = $xmlObject->item($i)->getElementsByTagName('id')->item(0)->childNodes->item(0)->nodeValue;
$product_type = $xmlObject->item($i)->getElementsByTagName('product_type')->item(0)->childNodes->item(0)->nodeValue;
$description = $xmlObject->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
$sale_price = $xmlObject->item($i)->getElementsByTagName('sale_price')->item(0)->childNodes->item(0)->nodeValue;
添加最后一个对象后 Saleprice
我收到了错误信息
致命错误:在中对null调用成员函数item()
我认为问题是“销售价格”的价值并不是每个项目都有
但是我该怎么解决这个问题呢?如果设置了值>这个值就会被导入mysql
提前谢谢
xml示例
<item>
<g:id>4</g:id>
<title>sadsadsdsadsadsadsadasd</title>
<description>dddddddd</description>
<g:product_type>aaaaaaaaa</g:product_type>
<link>https://www.xyz.de</link>
<g:image_link>https://www.xyz.de/600x600.jpg</g:image_link>
<g:condition>new</g:condition>
<g:availability>out of stock</g:availability>
<g:price>5,95</g:price>
<g:sale_price>4,99</g:sale_price>
<g:brand>asdasdsddsn</g:brand>
<g:gtin>137</g:gtin>
<g:mpn></g:mpn>
<g:shipping>
<g:country>DE</g:country>
<g:service>Standard</g:service>
<g:price>7,99</g:price>
</g:shipping>
<pubDate>Fri, 07 Dec 2018 12:10:02 CET</pubDate></item>
2条答案
按热度按时间fbcarpbf1#
您将访问列表的第一个节点,而不检查列表是否有节点。
如果这里没有
sale_price
元素(在一个上下文节点中)。因此,如果使用dom方法,则必须检查每个级别以避免这种情况。或者开始使用xpath:
输出:
erhoui1w2#
有两种方法可以实现这一点,您目前正在做的方法可以缩短,这样就没有那么多代码了。在sale\ u price中,它获取一个元素列表,如果没有,则默认为0。。。
或者您可以切换到simplexml,它的代码要少得多。在这里您可以使用php的
isset()
检查是否有值,如果没有则设置为0。在php7中,还可以使用null coalesce(??
)做同样的事。。。simplexml中唯一的复杂之处是它必须考虑名称空间,因此任何带有g前缀(例如id)的元素都需要从名称空间中读取
$g
变量,它是节点中所有以g为前缀的元素。