DOMDocument简单的GetElementsByTagName不会工作?

时间:2014-10-20 13:57:26

标签: php xml

        $xml = '<?xml version="1.0" encoding="UTF-8"?> 
<stw:ThumbnailResponse xmlns:stw="http://www.shrinktheweb.com/doc/stwresponse.xsd">
    <stw:Response>
        <stw:ThumbnailResult>
            <stw:Thumbnail Exists="true">http://imagelink.com</stw:Thumbnail>
            <stw:Thumbnail Verified="false">delivered</stw:Thumbnail>
        </stw:ThumbnailResult>
        <stw:ResponseStatus>
            <stw:StatusCode>refresh</stw:StatusCode>
        </stw:ResponseStatus>
        <stw:ResponseTimestamp>
            <stw:StatusCode>1413812009</stw:StatusCode>
        </stw:ResponseTimestamp>
        <stw:ResponseCode>
            <stw:StatusCode>HTTP:200</stw:StatusCode>
        </stw:ResponseCode>
        <stw:CategoryCode>
            <stw:StatusCode></stw:StatusCode>
        </stw:CategoryCode>
        <stw:Quota_Remaining>
            <stw:StatusCode>132</stw:StatusCode>
        </stw:Quota_Remaining>
        <stw:Bandwidth_Remaining>
            <stw:StatusCode>999791</stw:StatusCode>
        </stw:Bandwidth_Remaining>
    </stw:Response>
</stw:ThumbnailResponse>';

        $dom = new DOMDocument;
        $dom->loadXML($xml);


        $result = $dom->getElementsByTagName('stw:Thumbnail')->item(0)->nodeValue;
        $status = $dom->getElementsByTagName('stw:Thumbnail')->item(0)->nodeValue;

        echo $result;

拥有上面的代码应该输出http://imagelink.com并且$ status应该保持“已交付” - 但这些都不起作用而是我留下了错误通知:

Trying to get property of non-object

我尝试了不同的xml解析替代方法,比如simplexml(但是当标记名称包含在其中时它不起作用)并且我尝试循环遍历xml中的每个范围(ThumbNailresponse,response然后是thumbnailresult)而没有运气。< / p>

如何获取stw中的值:缩略图?

3 个答案:

答案 0 :(得分:1)

您需要指定命名空间,DOMDocument :: getElementsByTagName方法无法处理它。在manual

  

要匹配的标记的本地名称(没有名称空间)。

您可以改为使用DOMDocument::getElementsByTagNameNS

$dom = new DOMDocument;
$dom->loadXML($xml);

$namespaceURI = 'http://www.shrinktheweb.com/doc/stwresponse.xsd';
$result = $dom->getElementsByTagNameNS($namespaceURI, 'Thumbnail')->item(0)->nodeValue;

答案 1 :(得分:0)

这段代码实际上对我来说运行得很好---

通常情况下,这种错误意味着您可能在$dom对象上输了一个错字 - 请仔细检查并重试。

此外,值得注意的是,当您设置item(0)变量时,您想要将item(1)更改为$status

    $result = $dom->getElementsByTagName('stw:Thumbnail')->item(0)->nodeValue;
    $status = $dom->getElementsByTagName('stw:Thumbnail')->item(0)->nodeValue;

答案 2 :(得分:0)

使用简单的xml,你可以在这个上使用->children()方法:

$xml = simplexml_load_string($xml_string);
$stw = $xml->children('stw', 'http://www.shrinktheweb.com/doc/stwresponse.xsd');
echo '<pre>';
foreach($stw as $e) {
    print_r($e);
    // do what you have to do here
}