2016-05-23 73 views
0

我有一个.xml文件(原始超过7000行,但对于测试,我一直只使用一行只有3行,以防大小是我的问题,但它不是' t)我想从中提取数据。然而,作为一个自动生成的东西,它并不十分漂亮,观察:使用php从(巨大的)xml文件中提取数据使用php

<ROW MODID="182" RECORDID="561"> 
<COL> 
<DATA> 
</DATA> 
</COL> 
<COL> 
<DATA> 
6 quai St Pierre</DATA> 
</COL> 
<COL> 
<DATA> 
</DATA> 
</COL> 
<COL> 
<DATA> 
Monsieur</DATA> 
</COL> 
<COL> 

等等,等等...... 我已经设计我需要在Xacobeo运行的要求,但我似乎无法得到它与PHP一起工作。我试过变化的群众,最后一个是以下几点:

$xmldoc = new DOMDocument(); 
$xmldoc->load('hellashort.xml'); 
$xpathvar = new Domxpath($xmldoc); 
$queryResult = $xpathvar->query('//COL'); 
foreach($queryResult as $result){ 
    echo $result->textContent; 
} 

我想这个代码更美观的文件和它的作品,所以我怎么能得到它与此文件的工作? 所有建议表示赞赏。 感谢

UPDATE 我检查了短文件的错误,并意识到我没有关闭的元素,让一个作品,但是长文件包含根据网上检查没有错误,但仍然无法正常工作。

更新2 长文件现在工作的要求/,但只要没有返回,因为他们变得更加复杂,即://ROW/COL[position()=39]/DATA这Xacobeo返回正确的结果。 .xml文件可能太大而无法通过这种方式处理? (此文件是大约11.2莫)

更新3 - 固定 所以我改变了我的接洽,并最终做这种方式:

$file=file_get_contents("go.xml"); 
$xml=simplexml_load_string($file); 
$elements=$xml->path('//ROW/COL[position()=1]/DATA'); 

我明白为什么它被称为SimpleXML的,感谢所有的虽然帮助

+1

我会建议使用任何在线工具验证XML,并分享您正在收到什么错误,或发生了什么。 – Netham

+0

没有任何错误出现(无论是在屏幕上还是在日志中),并且没有出现任何结果......我在函数前后回应了几个随机短语,以确保我没有得到死亡的白色屏幕,并且他们都显示很好。 –

回答

0

首先确保您的服务器设置为显示所有可用的错误。 作为变体,将这个片段放在脚本的开头。

ini_set('display_startup_errors',1); 
ini_set('display_errors',1); 
error_reporting(E_ALL | E_STRICT); 

然后你可以分享错误信息吗?

+0

在浏览器或者apache错误日志中都没有错误...数组的'print_r'给了我'DOMNodeList Object()' –

0

确保您的文档只有一个根元素,即一个元素包含所有<ROW>元素:

<DOCUMENT> 
<ROW MODID="182" RECORDID="561"> 
<COL> 
<DATA> 
</DATA> 
</COL> 
<COL> 
<DATA> 
6 quai St Pierre</DATA> 
</COL> 
<COL> 
<DATA> 
<!-- ... --> 
</DOCUMENT> 

如果您有多个行没有根,这不是一个很好formet XML文件,并将其将失败:

<ROW MODID="182" RECORDID="561"> 
<COL> 
<DATA> 
</DATA> 
</COL> 
<COL> 
<!-- ... --> 
</ROW> 
<ROW MODID="183" RECORDID="562"> 
<!-- ... --> 
</ROW> 
+0

我已经检查过,整个文件包含在一个''元素中..我相当肯定,它正在被正确读取,因为查询只是在'/'中 –