2016-02-09 140 views
1

我必须解析自动生成XML文件到PHP,没有成功。simplexml解析XML版本

我正在用XML文件读取文件夹,并且每个文件都必须被解析。奇怪的是,我只得到版本作为输出。

我的代码:

$xml_folder = "/var/www/sitename/xml_folder/"; 
$xml_files = scandir($xml_folder); 
$xml_files = array_diff($xml_files, array('.', '..')); 

foreach($xml_files as $file) { 
    $xml_file = $xml_folder . $file; 
    $xml = simplexml_load_file($xmlfile); 
    print_r($xml); 
} 

现在,我的输出是这样的:

的XML看起来像一个正常生成的XML,这里是它的屏幕截图预览:

当然,它不是结构化的,但任何浏览器都可以处理它并创建一个有效的结构。

该结构对于simplexml是否重要? 我尝试了一堆变化,使其工作(即使与simplexml_load_string),但没有什么不会工作。

+0

我猜测它工作正常。试试这个:'echo htmlentities(print_r($ xml,1));'。您的浏览器只是不显示XML标签。尝试在您的网页上查看源代码,并且您会看到它在那里(我希望)。 – Kenney

+0

只是猜测,但你的问题可能不是XML,而是使用'print_r'函数。我没有看到任何理由期望print_r输出实际的XML。 –

+0

嗯,看起来不像是因为'print_r()'。用'echo htmlentities(print_r($ xml,1));'它只是输出和截图一样的东西。 –

回答

1

您不应该使用print_r进行XML,它不适用于xml。
相反,你可以用它来显示XML结构

echo $xml->asXML(); 

检查从答案:SimpleXML and print_r() - why is this empty?

不要使用的print_r()或后续代码var_dump()检查一个SimpleXMLElement,他们 韩元因为SimpleXML在场景后面使用了很多魔术 。相反,看看 asXML()返回。

+0

工程非常好,但我怎样才能循环到'$ xml-> asXML()'的输出?如果我的'print_r()'像'$ xml-> asx'这样的东西(就像我的屏幕截图一样),我只是得到错误'尝试获取非对象的属性。我的目标是将整个XML制作成一个PHP数组。 –

+0

选中此项:http://stackoverflow.com/questions/6167279/converting-a-simplexml-object-to-an-array –