xml foreach过滤元素

时间:2014-06-01 15:11:38

标签: php xml steam-web-api

你好我将过滤xml元素,并将显示一个具有指定标识的元素,如下所示:

<?php

$url11= 'http://api.steampowered.com/ISteamUserStats/GetSchemaForGame/v0002/?key=XXXXXXXXXXXXXXXXXX&appid=240&l=german&format=xml';
$data11 = file_get_contents($url11);
$xml = simplexml_load_string($data11);

$joke ="WIN_BOMB_PLANT";

foreach($xml->availableGameStats->achievements->achievement as $key => $value) {
    if($value->name->__toString() != $joke) {
    ?>
<img src="<?php echo $value->icon->__toString(); ?>" border="0" height="64" width="64" >
        <?php
    }
}
?>  

这是xml文档:

-<game>
 <gameName>ValveTestApp260</gameName>
 <gameVersion>181</gameVersion>
   -<availableGameStats>
      -<achievements>
        -<achievement>
          <name>WIN_BOMB_PLANT</name>
          <displayName>Bombenleger</displayName>
          <icon>
          http://media.steampowered.com/steamcommunity/public/images/apps/240 
          /4711014791e4ae29408e8bc2fcae1ab61ca7c189.jpg
          </icon>
         </achievement>
        -<achievement>
          <name>BOMB_PLANT_LOW</name>
          <displayName>Boomala Boomala</displayName>
          <icon>
          http://media.steampowered.com/steamcommunity/public/images/apps/240
          /5f689c20656716f2a8bf67bd26f3f7846786bca5.jpg
          </icon>
         </achievement>
         <achievement>
         -Another things-
         </achievement>
       </achievements>
    </availableGameStats>
 </game>

但现在它显示每个元素。像这样的例子: http://i.stack.imgur.com/BagDu.jpg

但我会认为脚本只显示如下指定的那个: http://i.stack.imgur.com/X2Oph.png

可以帮助我吗?谢谢你...因为我的英语不好或英语不好... ...

1 个答案:

答案 0 :(得分:0)

您可以使用xpath()来选择所需的节点,而不是迭代:

$xml = simplexml_load_string($x); // assume XML in $x

$icon = $xml->xpath("//achievement[name='WIN_BOMB_PLANT']/icon")[0];

请注意,对于[0]末尾的line 2,您需要PHP >= 5.4。如果您使用的是旧版本,请更新或执行以下操作:

$icon = $xml->xpath("//achievement[name='WIN_BOMB_PLANT']/icon");
$icon = $icon[0];

必要时将$icon投射到字符串。

看到它正常工作:https://eval.in/157598