$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中的值:缩略图?
答案 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
}