このスクリプトに問題があります。問題は、ノード名のハイフンが xmlreader をスローしていると想定していることです。ファイルは 1GB で、サーバーは 1GB しかないため、simplexml の代わりに xml リーダーを使用する必要があります。とにかく、これは xml です。 :
<dataroot>
<Hotel_All_Active_x0020_08-29-12>
...................
</Hotel_All_Active_x0020_08-29-12>
<Hotel_All_Active_x0020_08-29-12>
...................
</Hotel_All_Active_x0020_08-29-12>
</dataroot>
次に、これはスクリプトを解析しようとしているスクリプトです。スクリプトを実行すると、1 つの結果が返されます。xml で変換を実行できることはわかっていますが、隔週でプロセスを実行する必要がある場合があるため、そのままにしておきたいと思います。可能な限りシンプルで直接的です。単純なxmlでは中括弧で囲むことができ、同じ問題があるかどうか疑問に思いました。
すべての Hotel_All_Active_x0020_08-29-12 を循環するためのコードが聞こえます。
$reader = new XMLReader();
$reader->open("Hotel_All.xml");
$dom = new DomDocument();
while ($reader->read() && $reader->name !== 'Hotel_All_Active_x0020_08-29-12');
while ($reader->name === 'Hotel_All_Active_x0020_08-29-12')
{
$node = new SimpleXMLElement($reader->readOuterXml());
$nodename = $node->name;
$reader->next('Hotel_All_Active_x0020_08-29-12');
}
しかし、次の要素に移動することはありません.xmlreaderで不正な文字を処理する簡単な方法はありますか?それともxslを使用して名前を変更する唯一のオプションですか?
これは完全なスクリプトではありませんが、$reader->next(); まではわかっています。すべて順調