0

私はcakephp.whatの定義済み関数XMLコンポーネントを使用しています.xmlファイルデータを処理目的の配列に変換することです。この私のコードは次のようなものです:

App::import('Helper', 'Xml');
$xml = new XmlHelper();
$xml_data = & new XML($filePath);
$array = Set::reverse($xml_data);

私のxmlファイルに次の形式のデータが含まれている場合、このコードは完全に機能しています。

<parent>
  <tag ...../>
  <tag ...../>
</parent>

ルートノードはどこですか。

つまり、すべてのタグが 1 つの親タグ内にあります。

しかし、データがいくつかの異なる親タグに分散されている場合に問題が発生します

<parent>
  <tag ...../>
</parent>
<parent>
  <tag ...../>
</parent>

この場合、最初の親タグからのデータのみが出力配列に与えられます。xml ファイルにはルート ノードが 1 つしかないことはわかっていますが、問題は、xml ファイルを読んでいるときに、複数のルート ノードを持つファイルを取得することがあるということです。 私が知りたいのは、複数のルート ノードを持つ xml ファイルを読み取る方法があるということです。

これは、xml ファイル内の複数の親タグを読み取ることができる他の方法ですか?

4

1 に答える 1

0

これらの親要素は XML ドキュメントのルートにありますか? XML では 1 つのルート ノードしか許可されないため、これは重要です。ルート ノードの下には、必要な数の要素を含めることができます。<parent> がルートノードなのかルートノードのサブノードなのか、あなたの質問からは明らかではありません。

しかし、XML ファイルが永遠に非常に小さいままであると確信できない限り、あなたがやろうとしていることは悪い考えかもしれません。PHP の大きくて深い配列は、すぐに非常に遅くなる可能性があります。代わりに、XPath を学習することをお勧めします。XPath は、XML ドキュメント内のものを検索するための一種の「サブ言語」です。一般に、XML 処理はやや遅く重い傾向がありますが、大きくて深い PHP 配列は、どのように処理しても非常に遅くなる可能性があります。

それが役に立てば幸い!

于 2012-07-04T10:01:57.153 に答える