【问题标题】:PHP Dom XML Parsing on empty self closing tagsPHP Dom XML解析空的自闭标签
【发布时间】:2009-09-11 23:59:05
【问题描述】:

我正在使用 DOM 来解析一个 xml 文件。 当 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;

我得到的错误是:

试图获取非对象的属性

【问题讨论】:

    标签: php xml dom tags


    【解决方案1】:

    空标签不会有任何子节点,因此最后一行中的第二个 item(0) 不会返回有效对象,因此尝试通过 nodeValue 获取其值将引发错误你得到是因为它没有合适的对象来处理。

    【讨论】:

    • 谢谢,我也这么想。我的主要问题是找到一种方法来检查标签是否有任何子节点。我试过“item(0)->hasChildNodes”但没有运气。有什么想法吗?
    • 能否添加您尝试使用 hasChildNodes 的代码?
    • 没关系,我现在已经解决了。我删除了“childNodes->item(0)->”,它工作正常。感谢您的帮助!
    【解决方案2】:

    您收到的 XML 错误不是由于标签自动关闭;这是有效的 XML。这可能是由于没有找到名为 Title 的标签,或者没有返回 10 个标签(无论如何这是一种不好的编写方式,最好将循环基于 $x->length,这是一个已知值)。

    【讨论】:

    • 感谢您的建议。我已将其更改为 X->length 但错误仍然存​​在。我的问题是有 10 个不同的 $x 项目要循环,其中只有一个是空的,带有自闭合标签。我需要一种检查标签是否为空的方法。你能帮忙吗?
    • hasAttributes() 函数会告诉你它是否为空(自闭合)标签:us2.php.net/manual/en/domnode.hasattributes.php
    • 更正:我上面的评论不会告诉你它是否是一个 empty 标签——它仍然可以包含其他标签,它只会告诉你它是否有属性。 hasChildNodes() 会告诉你它是否有孩子。 us2.php.net/manual/en/domnode.haschildnodes.php
    猜你喜欢
    • 1970-01-01
    • 2010-12-16
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多