我正在解析带有房地产建筑清单的XML文件。一切都很好,我可以采取每个节点,并创建一个单独的wordpress帖子与自定义信息。问题是当我尝试访问图像节点时:每个建筑物都有一个图像节点,其中有多个图像。这就是我正在做的事情:
XML结构
<annunci>
<annuncio ..blablabla ...>
...some stuff...
<immagine categoria="PLANIMETRIE" didascalia="img_5862" tipo="foto">659-{23d7ac25-549e-40ef-9cb2-1e6f687182ec}_0.jpg</immagine>
<immagine categoria="PLANIMETRIE" didascalia="img_5864" tipo="foto">659-{8b9c3da4-edde-489a-8ca9-3dc91a0c5063}_1.jpg</immagine>
<immagine categoria="PLANIMETRIE" didascalia="img_5868" tipo="foto">659-{57790b4a-2482-4a66-8f7f-1a11765d1cab}_2.jpg</immagine>
<immagine categoria="PLANIMETRIE" didascalia="img_5870" tipo="foto">659-{b28b62f7-6375-4592-a269-c4ac8eac6087}_3.jpg</immagine>
<immagine categoria="PLANIMETRIE" didascalia="img_5871" tipo="foto">659-{0bf70101-b0ec-4835-9a06-3b916ad21241}_4.jpg</immagine>
<immagine categoria="PLANIMETRIE" didascalia="img_5872" tipo="foto">659-{dc5f87a1-364a-4c05-9a3a-be4cb51016f9}_5.jpg</immagine>
<immagine categoria="PLANIMETRIE" didascalia="img_5875" tipo="foto">659-{2fe1524d-b454-423c-90bf-a6f9fff17e8d}_6.jpg</immagine>
<immagine categoria="PLANIMETRIE" didascalia="img_5876" tipo="foto">659-{1060d120-b339-4bab-89cd-6b7781143a74}_7.jpg</immagine>
<immagine categoria="PLANIMETRIE" didascalia="img_5882" tipo="foto">659-{191c77d7-76f5-4fb9-873c-9221f755dcba}_8.jpg</immagine>
<immagine categoria="PLANIMETRIE" didascalia="planimetria" tipo="foto">659-{14a9a6f0-dbf5-48a2-a204-976b9a146f43}_9.jpeg</immagine>
...some other stuff ...
</annuncio>
</annunci>
这是我在插件中使用的代码:
if (!$xml = simplexml_load_file($xml_path)) {
echo 'unable to load XML file';
} else {
...
foreach ($xml->annuncio as $annuncio) {
...
$immagini = (array)$annuncio->immagine;
...
echo '<pre>'; //THIS IS FOR DEBUGGING
print_r($immagini);
echo '</pre>';
}
我得到了这种数组,每个我正在解析的建筑物之一:
Array
(
[@attributes] => Array
(
[categoria] => PLANIMETRIE
[didascalia] => img_5862
[tipo] => foto
)
[0] => 659-{23d7ac25-549e-40ef-9cb2-1e6f687182ec}_0.jpg
[1] => 659-{8b9c3da4-edde-489a-8ca9-3dc91a0c5063}_1.jpg
[2] => 659-{57790b4a-2482-4a66-8f7f-1a11765d1cab}_2.jpg
[3] => 659-{b28b62f7-6375-4592-a269-c4ac8eac6087}_3.jpg
[4] => 659-{0bf70101-b0ec-4835-9a06-3b916ad21241}_4.jpg
[5] => 659-{dc5f87a1-364a-4c05-9a3a-be4cb51016f9}_5.jpg
[6] => 659-{2fe1524d-b454-423c-90bf-a6f9fff17e8d}_6.jpg
[7] => 659-{1060d120-b339-4bab-89cd-6b7781143a74}_7.jpg
[8] => 659-{191c77d7-76f5-4fb9-873c-9221f755dcba}_8.jpg
[9] => 659-{14a9a6f0-dbf5-48a2-a204-976b9a146f43}_9.jpeg
)
首先,我无法摆脱属性,而且,当我尝试访问单个图像时总会出现错误,例如
echo $immagini[0];
我很确定这是愚蠢的,但我找不到解决方案,有人可以帮助我吗?
编辑1 对不起,错误是当我尝试在循环中访问单个图像时:
foreach($immagini as $test) {
echo $test;
}
我注意到了:在...中进行数组到字符串转换
编辑2 我用FOR循环解决了,但仍然不明白:D无论如何,它有效!
答案 0 :(得分:1)
曼,
我希望能在DOMDocument和SimpleXML上获得最佳体验。
在处理复杂的XML数据时,解决方案可能不是简单的&#34;,那么您可能不会使用SimpleXML来做这些事情。
使用DOMDocument,我解决了使用DOMDocument预订航空公司机票的复杂问题。
<?php
$dom = new DOMDocument();
$dom->loadXML('/path/to/xml.xml');
foreach ($dom->getElementsByTagName('annuncio') as $annuncio){
foreach ($annuncio->getElementsByTagName('immagine') as $immagine){
$categoria = $immagine->getAttribute('categoria');
}
}
?>
享受DOM!