如何遍历此xml并获取第二个href
标记的属性<link>
?具有属性rel="enclosure"
这是XML;
<entry>
<link rel="alternate" type="text/html" href="http://www.flickr.com/photos/dax/5495234222/in/set-756787626064123145/"/>
<link rel="enclosure" type="image/jpeg" href="http://farm6.staticflickr.com/5012/5485746322_9821c561bf_b.jpg" />
</entry>
到目前为止这是php脚本:
<?php
foreach ($feed->entry as $item) {
$photo = $item->link['href'];
?>
<div class="">
<a href="<?php print $photo; ?>" class="colorbox-load"><img class="img-responsive" src="<?php print $photo; ?>"></a>
</div>
<?php
}
?>
这是因为它打印了第一个href
的{{1}}而不是我需要的那个。
答案 0 :(得分:3)
使用simplexml
和xpath
根据其他属性选择属性
xpath
就像是XML的SQL查询:
$xml = simplexml_load_string($x); // assume XML in $x
$link = (string)$xml->xpath("/entry/link[@rel = 'enclosure']/@href")[0];
第2行末尾的[0]
需要PHP&gt; = 5.4。如果您使用的是较低版本,请更新或执行:
$link = $xml->xpath("/entry/link[@rel = 'enclosure']/@href");
$link = (string)$link[0];
xpath
- 表达式选择href
- 所有<link>
的属性 - 具有属性rel='enclosure'
并且<entry>
作为其父级的节点array
的{{1}}。
上面的代码只会选择simplexml Elements
的第一个元素,并将其转换为array
。
看到它有效:https://eval.in/107641
如果您想要使用string
- 循环,则需要检查foreach
,如下所示:
rel-attribute
答案 1 :(得分:1)
使用SimpleXML解析XML:
<?php
$xml = <<<XML
<entry>
<link rel="alternate" type="text/html" href="http://www.flickr.com/photos/dax/5495234222/in/set-756787626064123145/"/>
<link rel="enclosure" type="image/jpeg" href="http://farm6.staticflickr.com/5012/5485746322_9821c561bf_b.jpg" />
</entry>
XML;
$links = new SimpleXMLElement($xml);
echo $links->link[1]['href'];