鉴于此XML结构:
form(method="get" action="/foo")
button(type="submit") Run python script
如何访问媒体的属性:内容节点?我试过了
$xml = '<rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
<item>
<title>Title</title>
<media:group>
<media:content url="url1" />
<media:content url="url2" />
</media:group>
</item>
<item>
<title>Title2</title>
<media:group>
<media:content url="url1" />
<media:content url="url2" />
</media:group>
</item>
</channel>
</rss>';
$xml_data = new SimpleXMLElement($xml);
和
foreach ($xml_data->channel->item as $key => $data) {
$urls = $data->children('media', true)->children('media', true);
print_r($urls);
}
按照其他答案,但它们都返回空的SimpleXMLElements。
答案 0 :(得分:0)
当您使用SimpleXML回显XML时,您需要使用asXML()
查看真实内容,print_r()
执行自己的版本并且不显示所有内容...
foreach ($xml_data->channel->item as $key => $data) {
$urls = $data->children('media', true)->children('media', true);
echo $urls->asXML().PHP_EOL;
}
回声......
<media:content url="url1"/>
<media:content url="url1"/>
它只输出每个组中的第一个,因为您需要添加另一个foreach
来遍历每个元素的所有子节点。
foreach ($xml_data->channel->item as $key => $data) {
echo $data->title.PHP_EOL;
foreach ( $data->children('media', true)->children('media', true) as $content ) {
echo $content->asXML().PHP_EOL;
}
}
输出..
Title
<media:content url="url1"/>
<media:content url="url2"/>
Title2
<media:content url="url1"/>
<media:content url="url2"/>
要访问特定属性(例如第二个代码示例中的url属性),您必须使用attributes()
方法...
echo $content->attributes()['url'];