我有一个小问题。我需要解析一个文件并用结果填充一个Web横幅。问题是,该文件被称为:“_ banner_products.php”,其内容如下:
<?php header('Content-Type:text/xml'); ?><?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<carouselle>
<firstLayer>
<layerName>Leica Disto X310</layerName>
<layerProduct>Disto X310</layerProduct>
<layerPic>http://www.leicaestonia.ee/extensions/boxes_design/flashpics/1334482548.jpg</layerPic>
<layerPrice>0,-</layerPrice>
<layerPriceOld></layerPriceOld>
<layerLink>http://www.leicaestonia.ee/index.php?id=11627</layerLink>
<layerTimer>01.05.2012 00:00</layerTimer>
</firstLayer>
<firstLayer>
.....
.....
</firstLayer>
</carouselle>
如何循环浏览此文件以将所有“firstLayer”子项分组为一个,依此类推。 如果我只是使用:
$file = fopen("_banner_products.php", "r");
while (!feof($file)){
$line = fgets($file);
}
simplexml_load_file抛出这个 - “_banner_products.php:1:解析器错误:预期开始标记,'&lt;' “
然后我只得到&lt; ...&gt;的内容标签意味着如果我已经超出范围,我无法区分。
感谢任何人回复。如果有什么不清楚我会尝试解释更多。
EDIT。 感谢您提供解决方案,确实使用了完整的URL:
simplexml_load_file("http://localhost/MySite/_banner_products.php");
答案 0 :(得分:2)
您遇到了问题,因为simplexml_load_file
将您的文件视为本地xml文件..您需要做的是添加完整的网址
实施例
simplexml_load_file("http://localhost/web/_banner_products.php");
使用案例获取layerName
例如
_banner_products.php
<?php
header ( 'Content-Type:text/xml' );
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<carouselle>
<firstLayer>
<layerName>Leica Disto X310</layerName>
<layerProduct>Disto X310</layerProduct>
<layerPic>http://www.leicaestonia.ee/extensions/boxes_design/flashpics/1334482548.jpg</layerPic>
<layerPrice>0,-</layerPrice>
<layerPriceOld></layerPriceOld>
<layerLink>http://www.leicaestonia.ee/index.php?id=11627</layerLink>
<layerTimer>01.05.2012 00:00</layerTimer>
</firstLayer>
<firstLayer>
<layerName>Leica Disto X310</layerName>
<layerProduct>Disto X310</layerProduct>
<layerPic>http://www.leicaestonia.ee/extensions/boxes_design/flashpics/1334482548.jpg</layerPic>
<layerPrice>0,-</layerPrice>
<layerPriceOld></layerPriceOld>
<layerLink>http://www.leicaestonia.ee/index.php?id=11627</layerLink>
<layerTimer>01.05.2012 00:00</layerTimer>
</firstLayer>
</carouselle>
查看详情
$xml = simplexml_load_file("http://localhost/lab/stockoverflow/_banner_products.php");
echo "<pre>" ;
foreach($xml as $key => $element)
{
echo $element->layerName , PHP_EOL ;
}
答案 1 :(得分:1)
最明显的方法是删除第一行,然后将XML声明添加回代码中。
您也可以使用eval()
解析文件,但非常确定您正在解析的内容,因为这可能是一个非常大的安全漏洞。