2012-10-09 64 views
-1

我正在實現一個小事件管理器,以便使用Observer模式。要訂閱我的觀察我的活動,我使用下面的XML文件:SimpleXML(實際上是Zend_Config_Xml)和foreach:我在迭代哪個標籤?

<?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> 

這裏我只是一個<subscription>節點。而我的foreach環上subscription孩子! 爲了解決這個問題,我想知道我怎麼能檢查如果XML文件包含幾個<subscription>標籤,或只是一個...

任何幫助將不勝感激:)

編輯:有沒有辦法將xpath用於我的Zend_Config_Xml object

回答

0

只是爲了澄清,這是Zend_Config_Xml中的問題,它不存在於PHP的原有的SimpleXML。

鑑於你的第二個例子作爲$xml,我可以運行以下命令,得到了這個詞「訂閱」預期:

$configData = simplexml_load_string($xml); 
foreach($configData->subscriptions->subscription as $subscription) 
{ 
    echo $subscription->getName(); 
} 
+0

其實這就是我所做的。我沒有使用xpath。謝謝。 – LittleBigDev

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... */ 
} 
?> 

希望對您有所幫助!

+0

其實,我使用Zend_Config_Xml中加載此配置:'$ managerConfig =新Zend_Config_Xml中(APPLICATION_PATH。'/ configs/eventManager.xml');'...這個類沒有本地的'xpath'功能:( – LittleBigDev

+0

檢查這可能會對你有幫助:http://stackoverflow.com/questions/3576995/iterating -zend-配置的XML與 - 僅-1-子節點&http://stackoverflow.com/questions/5415651/zend-config-xml-strange-behaviour我認爲你可以使用的SimpleXML,而不是Zend_Config_Xml中 –

+0

是的,我最後將'Zend_Config_Xml'改爲'SimpleXML' si我不需要'Zend_Config'函數。謝謝。 – LittleBigDev