このコードは、大きなXMLファイルを解析する際に非効率的な結果を生成しています。PHPのdomdocumentが正しく解析されない
解析されるXMLは次のようになります。
<product>
<ItemId>1576829</ItemId>
<modelNumber>CX501</modelNumber>
<categoryPath><category><name>Buy</name></category>
<category><name>Car, Marine & GPS</name></category>
<category><name>Car Audio</name></category>
<category><name>Car Stereos</name></category>
<category><name>CD Decks</name></category></categoryPath>
</product>
製品の約100セット(そう基本的には上記のXML回100)
はたったの約3 - がある場合に、このコードは動作しますがあります5は製品を設定しますが、サイズが大きくなった場合は設定しません。 大きなファイルの場合はなぜ機能しないのですか?私はかなり大きなxmlファイル(1を解析するために、このPHPコードを使用する場合
<?php
set_time_limit(0);
// load up your XML
$xml = new DOMDocument;
$xml->load('file.xml');
// Array to store them
$append = array();
foreach ($xml->getElementsByTagName('product') as $product)
{
foreach($product->getElementsByTagName('name') as $name) {
// Stick $name onto the array
$append[] = $name;
}
// Now append all of them to product
foreach ($append as $a)
{
$product->appendChild($a);
}
$product->removeChild($xml->getElementsByTagName('categoryPath')->item(0));
}
// final result:
$result = $xml->saveXML();
echo $result;
$file = "new_file.xml";
file_put_contents($file,$result);
?>
このコードが実行された後、XMLファイルは、各製品のため、このように見えるようになっているが、しかし、
<?xml version='1.0'?>
<products>
<product>
<ItemId>531670</ItemId>
<modelNumber>METRA ELECTRONICS/MOBILE AUDIO</modelNumber>
<name>Buy</name></category>
<name>Car, Marine & GPS</name>
<name>Car Installation Parts</name>
<name>Deck Installation Parts</name>
<name>Antennas & Adapters</name>
</product>
</products>
を設定しましたcategoryPathノードとその子ノードを取り、ファイルの最下部に追加します(製品の場合は )小さなXMLファイル(3つの製品のセット)、その後、私は望みの結果を得るでしょう(上記のXMLコードはこのPHPコードでしたが、大きなファイル)。
私は100の製品を持っているXMLファイルを解析しようとする
は、結果はこのようになります設定します。名前の各ノードは、製品のノード内で追加されていません<?xml version='1.0'?>
<products>
<product>
<ItemId>531670</ItemId>
<modelNumber>METRA ELECTRONICS/MOBILE AUDIO</modelNumber>
</product>
</products>
<name>Buy</name></category>
<name>Car, Marine & GPS</name>
<name>Car Installation Parts</name>
<name>Deck Installation Parts</name>
<name>Antennas & Adapters</name>
。
「機能しません」とはどういう意味ですか?何が起こるのですか?どのようなエラーが表示されますか? –
"非効率な結果"とは何ですか? file_put_contentsを使ってファイルを書き込むのはなぜですか?とにかく上記のコードは何ですか? – Gordon
私は答えを更新しました。このコードは、変換されたXMLで新しいファイルを書き込みます。 – Ben