按字段数组中的属性获取XML数据

时间:2017-05-10 07:57:19

标签: php xml attributes

我有一个特定的问题,我希望有人可以帮助我。我已经拖了几个小时才能最终实现这一目标,但我觉得有一种更有效的方式来做我需要的事情。无论如何....这是我的XML文件的简单版本:

<api:relationship>
    <api:related>
        <api:object>
            <api:records>
                <api:record>
                    <api:native>
                        <api:field name="publisher">
                            <api:text>Some Guy</api:text>
                        </api:field>
                        <api:field name="title">
                            <api:text>This is the title</api:text>
                        </api:field>
                        <api:field name="volume">
                            <api:text>33</api:text>
                        </api:field>
                    </api:native>
                </api:record>
            </api:records>
        </api:object>
    </api:related>
</api:relationship>

我以这种方式得到所有这些信息:

$xml=simplexml_load_string($data);
$xml->registerXPathNamespace('api', 'http://www.something.com/api');

foreach($xml->xpath('//api:relationship') as $header)
{
    foreach($header->children('api', true)->related->object as $items) {
        foreach ($items->records->record->native->field as $fields) { 

            if ((string) $fields->attributes()->name == 'title') {  
                echo $fields->text;
            }
        }
  }

我觉得这是一种可笑的方式。

这里有多条记录,我遍历每个字段获取信息。

我希望有人能告诉我如何直接访问这些信息。

我正在尝试这样的事情:

$items['title']->text; 

$items->attributes()->title->text; 

foreach($items->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
}

但是最后一个没有意义,因为我只有一个值,对吧?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用xpath查找具有特定属性的特定值,如下所示:

$title = $xml->xpath('//api:field[@name="title"]');