我有这些php行:
<?php
$start_text = '<username="';
$end_text = '" userid=';
$source = file_get_contents('http://mysites/users.xml');
$start_pos = strpos($source, $start_text) + strlen($start_text);
$end_pos = strpos($source, $end_text) - $start_pos;
$found_text = substr($source, $start_pos, $end_pos);
echo $found_text;
?>
我想只看到整个文件中的名字,但它只显示了我的名字。我想看到所有的名字。
我认为它类似于:foreach ($found_text as $username)
....但在这里我被卡住了。
从OP帖子更新,如下:
<?php
$xml = simplexml_load_file("users.xml");
foreach ($xml->children() as $child)
{
foreach($child->attributes() as $a => $b)
{
echo $a,'="',$b,"\"</br>";
}
foreach ($child->children() as $child2)
{
foreach($child2->attributes() as $c => $d)
{
echo "<font color='red'>".$c,'="',$d,"\"</font></br>";
}
}
}
?>
使用此代码,我会收到有关我的用户的所有详细信息,但从所有这些详细信息中我只想看到2或3
现在我明白了:
name="xxx"
type="default"
can_accept="true"
can_cancel="false"
image="avatars/trophy.png"
title="starter"
........etc
来自同一用户的另一个细节“红色(在脚本上定义)”
reward_value="200"
reward_qty="1"
expiration_date="12/07/2012"
.....etc
我想看到什么?
,即第一栏“name="xxx
”的第一行&amp; expiration_date="12/07/2012
“来自第二栏
答案 0 :(得分:1)
您需要使用strpos函数的第3个参数offset
重复循环。这样,您每次都可以查找新名称。
像这样(未经测试)
<?php
$start_text = '<username="';
$end_text = '" userid=';
$source = file_get_contents('http://mysites/users.xml');
$offset = 0;
while (false !== ($start_pos = strpos($source, $start_text, $offset)))
{
$start_pos += strlen($start_text);
$end_pos = strpos($source, $end_text, $offset);
$offset = $end_pos;
$text_length = $end_pos - $start_pos;
$found_text = substr($source, $start_pos, $text_length);
echo $found_text;
}
?>
答案 1 :(得分:0)
您应该使用XMLReader或DOM或SimpleXML来阅读XML文件。如果您没有看到必要性,请尝试使用以下正则表达式方法来检索所有用户名:
<?php
$xml = '<xml><username="hello" userid="123" /> <something /> <username="foobar" userid="333" /></xml>';
if (preg_match_all('#<username="(?<name>[^"]+)"#', $xml, $matches, PREG_PATTERN_ORDER)) {
var_dump($matches['name']);
} else {
echo 'no <username="" found';
}