我正在尝试解析XML文件。我想创建一个项目对象,其中包含标题,日期,版本和包含项目中所有文件的文件数组。一切似乎都有用,例如标题,日期和版本。
我打印出来看看结果。但是,当我尝试打印出数组以查看内容是否正确时,没有任何反应。我不知道我哪里出错了。
<?php
require_once('project.php');
require_once('files.php');
function parse()
{
$svn_list = simplexml_load_file("svn_list.xml");
$dir = $svn_list->xpath("//entry[@kind = 'dir']");
foreach ($dir as $node) {
if (strpos($node->name, '/') == false) {
$endProject = initProject($node);
}
}
for ($x = 0; $x <= 7; $x++) {
echo $endProject->fileListArray[$x]->name . "<br />\r\n";
}
}
function initProject($node){
$project = new project();
$project->title = $node->name;
$project->date = $node->commit->date;
$project->version = $node->commit['revision'];
initFiles($node,$project);
return $project;
}
function initFiles($project){
$svn_list = simplexml_load_file("svn_list.xml");
$file = $svn_list->xpath("//entry[@kind ='file']/name[contains(., '$project->title')]/ancestor::node()[1]");
//$file = $svn_list->xpath("//entry[@kind='file']/name[starts-with(., '$project->title')]/..");
foreach($file as $fileObject){
$files = new files();
$files->size = $fileObject->size;
$files->name = $fileObject->name;
array_push($project->fileListArray, $files);
}
}
echo $endProject->fileListArray
打印出&#34;数组&#34; 7次。但是echo $endProject->fileListArray[$x]->name
不打印任何内容。
我不确定数组是否刚刚被初始化,或者我是否错误地解析了XML文件。
<?xml version="1.0" encoding="UTF-8"?>
<lists>
<list
path="https://subversion....">
<entry
kind="file">
<name>.project</name>
<size>373</size>
<commit
revision="7052">
<author></author>
<date>2016-02-25T20:56:16.138801Z</date>
</commit>
</entry>
<entry
kind="file">
<name>.pydevproject</name>
<size>302</size>
<commit
revision="7052">
<author></author>
<date>2016-02-25T20:56:16.138801Z</date>
</commit>
</entry>
<entry
kind="dir">
<name>Assignment2.0</name>
<commit
revision="7054">
<author></author>
<date>2016-02-25T20:59:11.144094Z</date>
</commit>
</entry>
答案 0 :(得分:0)
默认情况下,函数参数按值传递,这意味着参数的值不会在函数外部更改,除非您通过引用传递。 PHP docs有更多详细信息,但我想如果您只是更改:
function initFiles($project){...
到function initFiles(&$project){...
(请注意&amp; ),它会按预期工作。
答案 1 :(得分:0)
您的功能定义:
function initFiles( $project )
您的函数调用:
initFiles( $node, $project );
因此,该函数使用$node
作为$project
,但$node
没有->fileListArray
属性数组,因此array_push()
失败。
并且,将来,不要忘记在我们的php代码中激活错误检查:
error_reporting( E_ALL );
ini_set( 'display_errors', 1 );
通过错误检查,您的原始代码输出此错误:
PHP警告:array_push()要求参数1为数组,对象在...
中给出