使用simplexml加载xml格式错误

时间:2013-09-13 16:02:22

标签: php xml simplexml

我有一个格式错误的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格式错误的文件?或者逃避标签中的特征?

提前谢谢你们

1 个答案:

答案 0 :(得分:1)

这是一个天真的解决方案,如果您的&符问题与您提出的问题一样天真,那么这个解决方案是有用的。

您可以先将文件内容作为字符串获取:

$contents = file_get_contents($archivo);

然后,您可以运行str_replace来将所有&替换为&amp;

$contents = str_replace('&', '&amp;', $contents);

现在,将转义的字符串加载到simplexml中:

$articulos = simplexml_load_string($contents);