2009-09-11 131 views
0

我正在使用DOM解析xml文件。 而且我无法捕获XML标记为空且自我关闭时抛出的错误。PHP Dom XML解析空自我关闭标记

例如。 <Title />

$xml=("http://www.example.com/xml-to-parse.xml"); 
$xmlDoc = new DOMDocument(); 
$xmlDoc->load($xml); 

$element = $xmlDoc->getElementsByTagName('Root'); 

for ($i=0; $i <= 10; $i++) 
{ 
    $id = $element->item($i)->getElementsByTagName('Title') 
        ->item(0)->childNodes->item(0)->nodeValue; 

我得到的错误是:

试图让非对象

回答

2

空标签是不会有任何的子节点,财产因此在最后一行中的第二项(0)不会返回一个有效的对象,所以试图通过nodeValue获取它的值会抛出错误,因为它没有适当的对象来处理。

+0

谢谢,我也这么想。 我的主要问题是找到一种方法来检查标签是否有任何子节点。 我试过“item(0) - > hasChildNodes”但没有运气。 任何想法? – JordanC 2009-09-12 00:14:50

+1

您可以添加您尝试使用hasChildNodes的代码吗? – Amber 2009-09-12 01:01:59

+0

没关系我现在已经解决了。我删除了“childNodes-> item(0) - >”,它工作正常。 感谢您的帮助! – JordanC 2009-09-12 01:10:16

1

您收到的XML错误不是由于标签自闭;这是有效的XML。这很可能是因为没有找到名为Title的标签,或者没有返回10个标签(这是一个不好的方法来编写它,最好是将循环从$ x-> length(这是一个已知的值))。

+1

感谢您的建议。 我已将其更改为X->长度,但错误仍然存​​在。 我的问题是有10个不同的$ x项目要循环,只有其中一个是空的自闭标签。我需要一种检查标签是否为空的方法。 你能帮忙吗? – JordanC 2009-09-12 00:47:18

+0

hasAttributes()函数会告诉你它是否为空(自闭)标记:http://us2.php.net/manual/en/domnode.hasattributes.php – scotts 2009-09-12 04:05:55

+0

更正:我上面的评论不会告诉你如果它是* empty *标签 - 它仍然可以包含其他标签,它只会告诉你它是否具有属性。 hasChildNodes()会告诉你它是否有孩子。 http://us2.php.net/manual/en/domnode.haschildnodes.php – scotts 2009-09-12 04:07:41