从xml文件获取标记值列表

时间:2013-06-11 05:39:21

标签: xml dom xml-parsing php

我想通过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类型的对象作为数组

为什么导致此错误?如何修改我的代码来修复它?

1 个答案:

答案 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,这可能会更容易,因为它可以对节点值进行魔术访问,因此您可以直接回显结果。您也可以通过写下他们的名字来访问一个或多个标签。实际上不需要这样的功能。