Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php simplexml不确定如何访问标记的属性值_Php_Simplexml - Fatal编程技术网

Php simplexml不确定如何访问标记的属性值

Php simplexml不确定如何访问标记的属性值,php,simplexml,Php,Simplexml,我有一个xml文件。它是如何形成的: <?xml version="1.0"?> <export> <config> <exported_values> <value1>Dog</value1> <value2>Cat</value2> <value3>Bird</value3>

我有一个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 />';
    } 
}
if(!$xml=simplexml\u加载文件('xml/test.xml')){
echo“无法加载XML文件”;
}否则{
foreach($xml作为$item)
{
回显“项目:”。$item->config->item['name']。
; } }

但这不会带来任何回报。我遗漏了什么吗?

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

foreach( $xml->config->item as $item )
{
    echo 'item: ', $item->attributes()->name, '<br />';
}
foreach($xml->config->item as$item)
{
回显“item:”,$item->attributes()->name,
; }
输出:
项目:橙色
项目:蓝色
项目:黄色
项目:绿色

.您的
$item->config->item
$item
方法错误:
项只出现一次,因此在循环中每次访问它都没有意义

$xml
表示
节点,您希望在单个
节点中的多个
节点上循环,因此循环应为:

foreach( $xml->config->item as $item )
然后,
$item
将表示循环中每个特定的
节点,因此访问属性将非常简单:

echo $item['name'];

这是。

您的XML无效。您的结束标记实际上都没有关闭。您应该会收到几十条警告以及“无法加载XML文件”:-?这是你的真实代码吗?不,对不起,信息是敏感的,所以我没有包括实际的文件。我将纠正tagsOk的非关闭问题。我重新测试了它,现在文件加载正常。不要获取错误,但项不返回任何内容,因此我猜这是代码的问题,而不是XML。没有必要求助于
->attributes()
的冗长。在这里,您可以使用
$item['name']
:。谢谢@IMSoP,我不知道。
echo $item['name'];