我有一个特定的问题,我希望有人可以帮助我。我已经拖了几个小时才能最终实现这一目标,但我觉得有一种更有效的方式来做我需要的事情。无论如何....这是我的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";
}
但是最后一个没有意义,因为我只有一个值,对吧?
感谢您的帮助。
答案 0 :(得分:1)
您可以使用xpath查找具有特定属性的特定值,如下所示:
$title = $xml->xpath('//api:field[@name="title"]');