私はXMLファイルからPHPサイトマップパーサを実装しています。私は比較的うまくやっています。しかし、パーサーはより動的になる必要があります。見つかったすべてのchild_nodeに対して繰り返しループを繰り返す再帰関数を実装する必要があります。ノードは、別のchild_node内に多くのchild_nodeを含むことができます。私が今まで行ったことは、child_nodeごとに異なる変数名を持つforeachループを個別に実装することでしたが、これはあまり柔軟ではないので受け入れられません。PHPでXMLナビゲーションサイトマップを解析する
これは私のxmlファイルです:
<sitemap>
<node>
<id>rootnode</id>
<link>home.html</link>
</node>
<node>
<id>about</id>
<link>about.html</link>
</node>
<node>
<id>contact</id>
<link>contact.html</link>
<child_node>
<id>contact_uk</id>
<link>contact_uk.html</link>
<child_node>
<id>customer_support_uk</id>
<link>customer_support_uk.html</link>
</child_node>
</child_node>
<child_node>
<id>contact_usa</id>
<link>contact_usa.html</link>
</child_node>
</node>
<node>
<id>products</id>
<link>products.html</link>
</node>
</sitemap>
あなたはノードコンタクトがchild_node内child_nodeを持っていることに注意してくださいすることができます。これは再帰関数に必要なところです。
これは私の現在のPHPコードです:
$source = 'sitemap.xml';
// load as file
$sitemap = simplexml_load_file($source, null, true);
foreach ($sitemap->node as $node) {
if ($node->child_node != "") {
echo "$node->link<br/>";
foreach ($node->child_node as $child) {
if ($child->child_node != "") {
echo " " . $child->link . "<br/>";
foreach ($child->child_node as $innerchild) {
echo " " . $innerchild->link . "<br/>";
}
} else {
echo " " . $child->link . "<br/>";
}
}
} else {
echo "$node->link<br/>";
}
}
このPHPは正しい出力を持っているが、私はその親child_node内のすべてのchild_nodeのための別の別々のforeachループを作成する必要があります。誰かが、サイトマップにあるchild_node内のすべてのchild_nodeをトラバースするためにPHPコードを変更する方法について正しい方向で私を指摘できますか?
多くの感謝!
はどのように深く、それらのネストされたchild_nodesは行くことができますか?無限であれば、再帰関数を使いたいと思うでしょう。それ以外の場合は、2つのレベルしかない場合は、ネストされたループが最も簡単です。 –
非常に深く進むことができます。上の例では、その子は別の子の中に1つしかありません。しかし、実際には、それは非常に深くなる(10以上)。再帰関数はあまりよくありません。私はこれが私が必要としていることを知っています。手伝ってくれますか?ありがとう – seedg