0

我想xmlarrayby中获取标签的值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);
}

但出现错误:

致命错误:无法在第 400 行的 /path/to/index.php 中使用 DOMNodeList 类型的对象作为数组

为什么是这个错误的原因?如何修改我的代码来修复它?

4

1 回答 1

1

您遇到的问题是您使用 aDOMNodeList就好像它是一个数组一样。但是,该特定类型不能用于ArrayAccess

echo $images[0], "          ", $prices[0];

这就是您看到错误的原因。您可能希望首先将 转换DOMNodeList为数组,这可以通过iterator_to_array使用 a来完成,DOMNodeList之前在相关问题将DOMDocument 实现为数组中已对此进行了概述。

/**
 * @param string $xmlFile

...

 * @return DOMElement[]
 */
function parseXmlFileForTagName($xmlFile, $tagName)
{

...

    $elements = $doc->getElementsByTagName($tagName);

    return iterator_to_array($elements, FALSE);
}

现在该函数返回一个节点数组,DOMElement索引为零。但是,这些元素不会在字符串上下文中自动转换为字符串:

echo $images[0], "          ", $prices[0];

所以你需要阅读他们的nodeValue(我猜你正在寻找那个值):

echo $images[0]->nodeValue, "          ", $prices[0]->nodeValue;

那应该这样做。但是,正如我还评论了您的其他(可能重复的)问题,如果您使用 simplexml 而不是 DOMDocument,这可能会更容易,因为它具有对节点值的神奇访问权限,因此您可以直接回显结果。您也可以通过写下他们的名字来访问一个或多个标签。实际上不需要这样的功能。

于 2013-06-11T08:52:44.357 回答