我试图让PHP读取XML文件,然后将其转换为JSON在我写的一些类中使用。我遇到的问题是它不会循环遍历所有XML节点。
由于某种原因,它将只返回一个节点而不是两个节点。我猜可能是JSON对象没有正确格式化。我已经用了大约2天了,啊!我是新手,所以对我好点;)
tracker.xml
<?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>
xml.php
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());
}
}
json.php
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"
}
]
}
return
立即,嗯,从当前函数返回。需要echo
进行调试,如
foreach($json->student as $v)
{
echo 'ID: '.$v->id.'Last: '.$v->lname.'First: '.$v->fname;
}
如果你想返回结果,要么只返回JSON对象,要么将其解析为数组或字符串。
那个JSON字符串对我来说是正确的,问题在于return
语句-当您循环遍历数组时,请使用echo
。
关于JSON
我重新格式化了你的输出。如您所见,在"学生"下面有两个节点。可能您漏掉了[
和]
字符。
下次格式化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;
}