0

byでタグxmlの値を取得したいと思います。私はこのスニペットを使用しました:arrayphp

$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

あなたが持っている問題DOMNodeListは、配列であるかのように a を使用することです。ただし、その特定のタイプは次では使用できませんArrayAccess

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

これがエラーが表示される理由です。DOMNodeList最初に を配列に変換することをお勧めします。これは、関連する質問DOMDocument を Array に実装する で以前に概説したiterator_to_arrayを使用して行うことができます。DOMNodeList

/**
 * @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;

そして、それはそれを行う必要があります。ただし、他の(重複の可能性がある)質問にもコメントしたように、DOMDocument の代わりに simplexml を使用すると、ノード値に魔法のようにアクセスできるため、結果を直接エコーできるため、より簡単になる可能性があります。また、名前を書くことで、1 つまたは複数のタグにアクセスできます。実際にはそのような機能は必要ありません。

于 2013-06-11T08:52:44.357 に答える