【问题标题】:How do you get the object name when using SimpleXML?使用 SimpleXML 时如何获取对象名称?
【发布时间】:2009-10-06 20:03:42
【问题描述】:

如果格式如下,其中 c 是一个对象数组,我必须在每次迭代中遍历:

$a->b->c

我愿意:

$z = $a->b
foreach($z as $key => $value)
echo $value['field'];

$key 出现为空,即使我有有效值。如何获取对象的名称?

【问题讨论】:

    标签: php simplexml


    【解决方案1】:

    XML:

    <a>
      <b>
        <c />
        <d />
        <e />
      </b>
    </a>
    

    PHP 代码:

    $xml = new SimpleXMLElement($file_url, true);
    foreach($xml->b->children() as $node) {
        echo $node->getName() . "\n";
    }
    

    会给你:

    c
    d
    b
    

    请参阅PHP's manual 以获取更多参考。

    【讨论】:

    • 这是一个更优雅且基于 OO 的解决方案,更好地利用了 SimpleXML。
    【解决方案2】:

    考虑以下 XML 和使用 SimpleXML 加载它的代码:

    $str = <<<XML
    <root>
        <a>
            <b>
                <c>glop</c>
                <d>test</d>
            </b>
        </a>
    </root>
    XML;
    $xml = simplexml_load_string($str);
    

    您可以将$xml-&gt;a-&gt;b“投射”到一个数组,以便能够对其进行迭代:

    foreach ((array)$xml->a->b as $name => $value) {
        echo "$name : $value<br />";
    }
    

    你会得到这样的输出:

    c : glop
    d : test
    

    (可能与您的 XML 字符串不完全相同,但我希望这会帮助您找到解决方案——如果可以,您能否编辑您的问题以向我们展示 XML 数据,以及您的输出会愿意得到吗?)

    引用手册页,Converting to array section

    如果一个对象被转换为一个数组, 结果是一个数组,其元素 是对象的属性。
    键 是成员变量名称,带有 几个值得注意的例外:整数 属性不可访问;私人的 变量具有类名 附加在变量名前; 受保护的变量有一个'*' 附加到变量名。

    【讨论】:

    • 这是一个使用 ArrayAccess 的对象。我不确定您的解决方案是否适用。
    • 胡;你的意思是它与 SimpleXML 无关? (你的问题标题中有“simplexml”,所以我可能有点走捷径^^)
    • 它使用的是simpleXML,该对象是一个实现ArrayAccess接口的对象,你的答案实际上是正确的:)在我的foreach前面添加(array)导致我的$key得到正确值,而不是返回 NULL 值。
    • 好的——感谢您的澄清 :-) 我不得不承认我有一点怀疑 ^^ ;;玩得开心!
    猜你喜欢
    • 2010-12-05
    • 2016-09-03
    • 2014-01-16
    • 1970-01-01
    • 2012-02-16
    • 2022-08-23
    • 2015-01-20
    相关资源
    最近更新 更多