-1

オブザーバー パターンを使用するために、小さなイベント マネージャーを実装しています。オブザーバーをイベントにサブスクライブするために、次の xml ファイルを使用しています。

<?xml version="1.0" encoding="UTF-8"?>
<configData>
    <subscriptions>
        <subscription>
            <eventName>event_name</eventName>
            <class>My_Observer_Class</class>
            <function>myFunction</function>
        </subscription>
        <subscription>
            <eventName>other_event_name</eventName>
            <class>My_Observer_Otherclass</class>
            <function>myOtherFunction</function>
        </subscription>
    </subscriptions>
</configData>

私はforeachサブスクリプションをループするために使用しています:

foreach($subscriptions->subscription as $subscription) {
    /* using $subscription->eventName etc... */
}

そして、すべてが大丈夫です、各$subscriptionアイテムにはそれがありeventNameます...

しかし、ここに私の問題があります:

<?xml version="1.0" encoding="UTF-8"?>
<configData>
    <subscriptions>
        <subscription>
            <eventName>event_name</eventName>
            <class>My_Observer_Class</class>
            <function>myFunction</function>
        </subscription>
    </subscriptions>
</configData>

ここにはノードが1 つ しかありません。<subscription>そして、子供たちforeachの私のループ!この問題を解決するために、xml ファイルに複数のタグが含まれているか、1 つだけ含まれているかを確認する方法を知りたいです...subscription <subscription>

どんな助けでも大歓迎です:)

編集:xpath myで使用する方法はありZend_Config_Xml objectますか?

4

2 に答える 2

1

Xpathを使用できます。

以下のコードを試してください。提供された両方のサンプルXMLでテストしました。

<?php

$subscriptions = simplexml_load_file('test.xml');

$scTag = $subscriptions->xpath("//subscription");

 foreach($scTag as $subscription) {
     echo $subscription->eventName;
          /* using $subscription->eventName etc... */
 } 
?>

この助けを願っています!

于 2012-10-09T07:01:38.067 に答える
0

明確にするために、これは PHP のネイティブ SimpleXML には存在しない Zend_Config_XML の問題です。

2番目の例を と$xmlすると、次を実行して、期待どおりに「サブスクリプション」という単語を取得できます。

 $configData = simplexml_load_string($xml);
 foreach($configData->subscriptions->subscription as $subscription)
 {
     echo $subscription->getName(); 
 }
于 2012-10-13T21:24:41.277 に答える