PHP foreach不会工作

时间:2018-03-13 21:48:01

标签: php xml loops foreach

我在这里做错了什么?

<?php
 $xml=simplexml_load_file("<dict>
 <key>ChannelID</key>
 <string>example</string>
 <key>ChannelDVRs</key>
 <array>
 <dict>
 <key>id</key>
 <string>LIVE</string>
 <key>name</key>
 <string>example1111</string>
 <key>description</key>
 <string>Live</string>
 <key>logoUrl</key>
 <string>http://www.example.com/logos/190x110/298.jpg</string>
 <key>logoUrlSD</key>
 <string>http://www.example.com/logos/190x110/298.jpg</string>
 <key>isVOD</key>
 <string>false</string>
 <key>StreamURL</key>
 <string>exampleessssssssssss test</string>
 </dict>
 </array>
 </dict>") 
 or die("Error: Cannot create object");

foreach ($xml->string as $output) {
echo "$output <br>";
}?>

如果有某种方法可以获得最后一个字符串exampleessssssssssss test我不需要使用foreach。感谢任何帮助;)

3 个答案:

答案 0 :(得分:1)

您需要正确加载XML字符串,然后获取正确的元素。

$xml = simplexml_load_string(
    "<dict>
        <key>ChannelID</key>
        <string>example</string>
        <key>ChannelDVRs</key>
        <array>
            <dict>
                <key>id</key>
                <string>LIVE</string>
                <key>name</key>
                <string>example1111</string>
                <key>description</key>
                <string>Live</string>
                <key>logoUrl</key>
                <string>http://www.example.com/logos/190x110/298.jpg</string>
                <key>logoUrlSD</key>
                <string>http://www.example.com/logos/190x110/298.jpg</string>
                <key>isVOD</key>
                <string>false</string>
                <key>StreamURL</key>
                <string>exampleessssssssssss test</string>
            </dict>
        </array>
    </dict>") 
 or die("Error: Cannot create object");

echo end($xml->array->dict->string); //output exampleessssssssssss test

$xml->array->dict->string是一个数组,因此end()函数将获得最后一个元素,正如您所希望的那样。

答案 1 :(得分:0)

只是一种替代方案,除了作为<key>StreamURL</key>之后的元素之外,它不依赖于任何顺序的内容。这确保了如果将来有更改,代码就不会停止工作。

$xml=simplexml_load_string("<dict>
 <key>ChannelID</key>
 <string>example</string>
 <key>ChannelDVRs</key>
 <array>
 <dict>
 <key>id</key>
 <string>LIVE</string>
 <key>name</key>
 <string>example1111</string>
 <key>description</key>
 <string>Live</string>
 <key>logoUrl</key>
 <string>http://www.example.com/logos/190x110/298.jpg</string>
 <key>logoUrlSD</key>
 <string>http://www.example.com/logos/190x110/298.jpg</string>
 <key>isVOD</key>
 <string>false</string>
 <key>StreamURL</key>
 <string>exampleessssssssssss test</string>
 </dict>
 </array>
 </dict>")
 or die("Error: Cannot create object");

$text = $xml->xpath('//key[text()="StreamURL"]/following-sibling::string/text()');
echo (string)$text[0];

使用XPath,您可以根据元素内容进行搜索,然后选择以下<string>元素。当xpath()返回匹配节点列表时,请使用[0]获取第一个项目。

答案 2 :(得分:0)

将@Felippe Duarte代码更改为使用str_replace回显使用以下代码

$str =  end($xml->array->dict->string);
$edited_str = str_replace("exampleessssssssssss","examples",$str);
echo $edited_str;