我有一个.xml
文件(原始版本超过7000行,但是为了测试我一直使用一行只有3行,如果大小是我的问题,但事实并非如此),我会喜欢提取数据。然而,作为一个自动生成的东西,它并不是非常漂亮,观察:
<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;
}
我尝试使用更美观的文件来使用此代码并且它有效,所以如何才能使用此文件? 所有建议都赞赏。 感谢
更新 我检查了短文件中的错误并意识到我没有关闭一个元素,所以一个工作,但是长文件根据在线检查器没有包含错误但仍然不起作用。
更新2
long文件现在适用于请求/
,但只要它们变得更复杂就返回任何内容,即://ROW/COL[position()=39]/DATA
在Xacobeo中返回正确的结果。
.xml
文件是否可能太大而无法以这种方式处理? (这个文件约为11.2 Mo)
更新3 - 已修复 所以我改变了我的态度并最终以这种方式做到了:
$file=file_get_contents("go.xml");
$xml=simplexml_load_string($file);
$elements=$xml->path('//ROW/COL[position()=1]/DATA');
我知道为什么它被称为simpleXML,感谢所有的帮助,但
答案 0 :(得分:0)
首先确保您的服务器设置为显示所有可用错误。 作为变体,将此代码段放在脚本的最开头。
ini_set('display_startup_errors',1);
ini_set('display_errors',1);
error_reporting(E_ALL | E_STRICT);
然后你可以分享错误信息吗?
答案 1 :(得分:0)
确保您的文档只有一个根元素,即包含所有<ROW>
元素的元素:
<DOCUMENT>
<ROW MODID="182" RECORDID="561">
<COL>
<DATA>
</DATA>
</COL>
<COL>
<DATA>
6 quai St Pierre</DATA>
</COL>
<COL>
<DATA>
<!-- ... -->
</DOCUMENT>
如果你有多个没有root的行,那么它不是一个好的XML文件,它会失败:
<ROW MODID="182" RECORDID="561">
<COL>
<DATA>
</DATA>
</COL>
<COL>
<!-- ... -->
</ROW>
<ROW MODID="183" RECORDID="562">
<!-- ... -->
</ROW>