我正在尝试让PHP读取XML文件,然后将其转换为JSON以在我编写的某些类中使用。我遇到的问题是它不会遍历所有XML节点。
由于某种原因,它只返回一个节点,而不是两个节点。我的猜测可能是我的JSON对象格式不正确。我一直在弄乱这个约2天,唉!我是新手,所以对我很轻松;)
<?xml version="1.0" encoding="UTF-8"?>
<tracker>
<student>
<id>0425655</id>
<lname>Doe</lname>
<fname>John</fname>
</student>
<student>
<id>0123456</id>
<lname>Smith</lname>
<fname>Jane</fname>
</student>
</tracker>
class xml
{
private $path;
public function __construct($path)
{
$this->path = $path;
}
public function xmlParse()
{
$xml = simplexml_load_file($this->path);
return json_encode($xml->children());
}
}
class json
{
private $xmlArray;
public function __construct($xmlArray)
{
$this->xmlArray = $xmlArray;
}
public function getJSON()
{
$json = json_decode($this->xmlArray);
foreach($json->student as $v)
{
return 'ID: '.$v->id.'Last: '.$v->lname.'First: '.$v->fname;
}
}
}
我知道我可以将true
作为第二个参数传递给json_decode()
,但我想使用对象。
这是json_decode()
的输出(在通过getJSON进行格式化之后):
{
"student": [
{
"id": "0425655",
"lname": "Doe",
"fname": "John"
},
{
"id": "0123456",
"lname": "Smith",
"fname": "Jane"
}
]
}
答案 0 :(得分:1)
return
,从当前函数返回。您希望echo
进行调试,如
foreach($json->student as $v)
{
echo 'ID: '.$v->id.'Last: '.$v->lname.'First: '.$v->fname;
}
如果要返回结果,只需返回JSON对象或将其解析为数组或字符串。
答案 1 :(得分:0)
JSON字符串看起来正确,问题在于return
语句 - 当您循环遍历数组时,请使用echo
。
答案 2 :(得分:0)
我重新格式化了你的输出。如您所见,是“student”下的两个节点。也许您错过了[
和]
字符。
下次格式化您的JSON,以便更好地了解正在发生的事情。 :)
您可能也错过了它,因为您的调试输出已损坏:
foreach($json->student as $v)
{
return 'ID: '.$v->id.'Last: '.$v->lname.'First: '.$v->fname;
}
在第一次迭代后返回。
尝试:
$output = '';
foreach ($json->student as $v) {
$output .= "ID: {$v->id} Last: {$v->lname} First: {$v->fname}\n";
}
return $output;
老实说,我希望一个名为getJSON()
的函数返回,好吧...... JSON。不是一些作者写的字符串。你的课程和职能整体名称很差。
也许你的功能应该是这样的:
public function getJSON()
{
$json = json_decode($this->xmlArray);
// some debug output for development
foreach ($json->student as $v) {
echo "ID: {$v->id} Last: {$v->lname} First: {$v->fname}\n";
}
return $json;
}