繁体   English   中英

PHP simpleXML-foreach循环运行

[英]PHP simpleXML - foreach loop run

实际上,我一直坚持通过一个简单的xml文档运行一个foreach循环。 该文档如下所示:

<outfits>
    <outfit default="1" skin="0xFCDBBA" species="stud">
        <head url="http://assets.zwinky.com/assets/stud/heads/01/head1" c="0xF2B38A" c2="0xffffff" z="33000"/>
        <face url="http://assets.zwinky.com/assets/stud/faces/01/stud3" c="0x996633" c2="0xffffff" z="34000"/>
        <midsection url="http://assets.zwinky.com/assets/stud/midsections/01/ms1" z="9000"/>
        <leg url="http://assets.zwinky.com/assets/stud/legs/01/legs1" z="10000"/>
        <hair url="http://assets.zwinky.com/assets/stud/hair/01/hr11" c="0x5C1C01" c2="0xffffff" z="37000"/>
    </outfit>
</outfits>

因此,我有点尝试将每个节点作为单个项目。

我的代码:

$xml = simplexml_load_file($outfitUrl);

foreach($xml->outfit->children() as $item) {
    echo $item;
}

可悲的是什么也没有出现。

代码的输出与预期的一样,因为节点为空
(尽管它们的数据存储在属性中):

<leg url="http://assets.zwinky.com/assets/stud/legs/01/legs1" z="10000"/>

如果它有一个值,它将看起来像这样,并且代码会回显它:

<leg url="http://someurl" z="10000">This is a node value.</leg>

如果要检索那些节点的属性,则需要第二个foreach -loop:

$xml = simplexml_load_string($x); // assume XML in $x

foreach ($xml->outfit->children() as $item) {

    // this loop will display all attributes of the current node:
    foreach ($item->attributes() as $att => $attvalue)
        echo "$att: $attvalue" . PHP_EOL;

}

看到它正常工作: https : //eval.in/312473

如果知道所需属性的名称,则可以直接访问它们:

foreach ($xml->outfit->children() as $item) {

    echo $item['url'] . PHP_EOL;

}

如果您甚至知道想要的节点名称,就可以...

foreach ($xml->outfit as $outfit) {

    echo $outfit['species'] . PHP_EOL;
    echo $outfit->hair['url'] . PHP_EOL;
    echo $outfit->face['url'] . PHP_EPÖ;
    // etc.

}

请参阅PHP手册以获取提示: http : //php.net/manual/zh/simplexml.examples-basic.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM