PHP - 为属性循环xml

时间:2014-03-01 21:53:46

标签: php xml foreach simplexml

如何遍历此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}}而不是我需要的那个。

2 个答案:

答案 0 :(得分:3)

使用simplexmlxpath根据其他属性选择属性 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'];