SimpleXML(实际上是Zend_Config_Xml)和foreach :我在迭代哪个标签



我正在实现一个小的事件管理器,以便使用观察者模式。为了让我的观察者订阅我的事件,我使用以下 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>

在这里,我只有一个<subscription>节点。我的foreach循环在subscription孩子身上!为了解决这个问题,我想知道如何检查 xml 文件是否包含多个<subscription>标签,或者只有一个......

任何帮助将不胜感激:)

编辑:有没有办法将xpath与我的Zend_Config_Xml object一起使用?

您可以使用 Xpath。

请尝试以下代码,我已经使用您提供的两个示例 XML 对其进行了测试。

<?php
$subscriptions = simplexml_load_file('test.xml');
$scTag = $subscriptions->xpath("//subscription");
 foreach($scTag as $subscription) {
     echo $subscription->eventName;
          /* using $subscription->eventName etc... */
 } 
?>

希望这个帮助!

澄清一下,这是 PHP 原生 SimpleXML 中不存在的Zend_Config_XML问题。

鉴于您的第二个示例作为$xml,我可以运行以下内容并按预期获得"订阅"一词:

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

相关内容

  • 没有找到相关文章