simplexml不确定如何访问tag的属性值

时间:2013-11-20 17:49:40

标签: php simplexml

我有一个xml文件。以下是它的形成方式:

<?xml version="1.0"?>
<export>
    <config>
        <exported_values>
            <value1>Dog</value1>
            <value2>Cat</value2>
            <value3>Bird</value3>
            <value4>Mouse</value4>
        </exported_values>

        <item name="orange" text="this is item 1" />
        <item name="blue" text="this is item 2" />
        <item name="yellow" text="this is item 3" />
        <item name="green" text="this is item 4" />
    </config>
</export>

如何在项目中访问name的值?我没试好就试过这个:

if( ! $xml = simplexml_load_file('xml/test.xml') ){
    echo 'unable to load XML file';
} else {
    foreach( $xml as $item )
    {
        echo 'item: '.$item->config->item['name'].'<br />';
    } 
}

但这并不能归还任何东西。我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您的问题与您尝试从XML节点访问属性的方式有关。只需将您的foreach代码更新为:

foreach( $xml->config->item as $item )
{
    echo 'item: ', $item->attributes()->name, '<br />';
}

输出:

item: orange<br />item: blue<br />item: yellow<br />item: green<br />

Working demo

答案 1 :(得分:1)

您的$item->config->item$item方式错误:<config>项目只出现一次,因此每次循环访问它都没有意义。

$xml表示<export>节点,并且您希望遍历单个<item>节点中的几个<config>节点中的每个节点,因此循环应为:< / p>

foreach( $xml->config->item as $item )

然后$item将代表循环中的每个特定<item>节点,因此访问该属性将非常简单:

echo $item['name'];

这是a complete live example