我想通过xml
获取array
php
中$images = parseXmlFileForTagName("Rambod_catalog.xml", "Thumbnail");
$prices = parseXmlFileForTagName("Rambod_catalog.xml", "Retail_Price");
echo $images[0], " ", $prices[0];
/**
* @param string $xmlFile
* @param string $tagName
*
* @throws InvalidArgumentException
* @return DOMNodeList
*/
function parseXmlFileForTagName($xmlFile, $tagName)
{
$doc = new DomDocument;
$r = $doc->load($xmlFile);
if (!$r) {
throw new InvalidArgumentException(sprintf('Failed to load file %s', $xmlFile));
}
return $doc->getElementsByTagName($tagName);
}
的标记值。
我使用过这段代码:
{{1}}
但出现错误:
致命错误:无法在第400行的/path/to/index.php中使用DOMNodeList类型的对象作为数组
为什么导致此错误?如何修改我的代码来修复它?
答案 0 :(得分:1)
您遇到的问题是您使用DOMNodeList
就好像它是一个数组一样。但是,该特定类型不能与ArrayAccess
一起使用:
echo $images[0], " ", $prices[0];
这就是您看到错误的原因。您可能希望首先将DOMNodeList
转换为数组,这可以通过iterator_to_array
使用DOMNodeList
来完成,/**
* @param string $xmlFile
...
* @return DOMElement[]
*/
function parseXmlFileForTagName($xmlFile, $tagName)
{
...
$elements = $doc->getElementsByTagName($tagName);
return iterator_to_array($elements, FALSE);
}
之前已在相关问题 {{3}中进行了概述}}
DOMElement
现在该函数返回一个echo $images[0], " ", $prices[0];
个节点的数组,零索引。但是,这些元素不会在字符串上下文中自动转换为字符串:
nodeValue
所以你需要阅读他们的echo $images[0]->nodeValue, " ", $prices[0]->nodeValue;
(因为我猜你正在寻找那个值):
{{1}}
那应该这样做。但是,由于我还评论了您的其他(可能是duplciate)问题,如果您使用simplexml而不是DOMDocument,这可能会更容易,因为它可以对节点值进行魔术访问,因此您可以直接回显结果。您也可以通过写下他们的名字来访问一个或多个标签。实际上不需要这样的功能。