我有一个格式错误的xml文件,基本上它在标签内部有&(&)并且它们没有被转义......
这是我用来加载xml的代码。
$archivo = "tarifa_mayorista.xml";
echo "Reading file<br>";
if (file_exists($archivo)) {
$articulos = simplexml_load_file($archivo);
if($articulos){
foreach ($articulos->Categoria as $rs) {
$categoria = (string) $rs->TxCategoria;
$subCat = (string) $rs->SubCategoria[0]->TxSubCategoria;
$cod = (string) $rs->SubCategoria[0]->SubCategoria2[0]->PartNumber;
$stock = (string) $rs->SubCategoria[0]->SubCategoria2[0]->Stock;
$precio = (string) $rs->SubCategoria[0]->SubCategoria2[0]->Precio;
$fabricante = (string) $rs->SubCategoria[0]->SubCategoria2[0]->Fabricante;
$ean = (string) $rs->SubCategoria[0]->SubCategoria2[0]->EAN;
$descripcion = (string) $rs->SubCategoria[0]->SubCategoria2[0]->Descripcion;
$canon = (string) $rs->SubCategoria[0]->SubCategoria2[0]->Canon;
$desc = mysql_real_escape_string($descripcion);
$sql2="insert into `activadosmil`
set cod='".trim($cod)."', stock='".trim($stock)."', precio='".trim($precio)."', categoria='".$categoria."',
subcategoria='".$subCat."', descripcion='".$desc."', ean='".trim($ean)."', canon='".trim($precio)."', fabricante='".trim($fabricante)."'";
mysql_query($sql2) or die(mysql_error()."<hr>".$sql2);
}
} else echo "<br>Invalid XML sintaxis";
} else echo "<br>Error opening ".$archivo;
/ * SAMPLE XML CODE * /
<Categoria>
<TxCategoria>ALMACENAMIENTO</TxCategoria>
<SubCategoria>
<TxSubCategoria>CARCASAS DISCO DURO</TxSubCategoria>
<SubCategoria2>
<TxSubCategoria2>2,5"</TxSubCategoria2>
<PartNumber>5VECTRIXALU3,5</PartNumber>
<Fabricante>TACENS</Fabricante>
<EAN>4710700954461</EAN>
<Descripcion>MONITOR ASUS LED&PIP 27 VE278Q</Descripcion>
<Precio> 12.37</Precio>
<Stock> 0</Stock>
<Canon> 0.00</Canon>
</SubCategoria2>
</SubCategoria>
</Categoria>
有没有办法用simplexml加载xml格式错误的文件?或者逃避标签中的特征?
提前谢谢你们
答案 0 :(得分:1)
这是一个天真的解决方案,如果您的&符问题与您提出的问题一样天真,那么这个解决方案是有用的。
您可以先将文件内容作为字符串获取:
$contents = file_get_contents($archivo);
然后,您可以运行str_replace来将所有&
替换为&
$contents = str_replace('&', '&', $contents);
现在,将转义的字符串加载到simplexml中:
$articulos = simplexml_load_string($contents);