Php 使用simplexml加载格式不正确的xml

Php 使用simplexml加载格式不正确的xml,php,xml,simplexml,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->Categor

我有一个格式不正确的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;
$archivo=“tarifa\u mayorista.xml”;
回显“读取文件
”; 如果(文件_存在($archivo)){ $articulos=simplexml\u加载文件($archivo); 如果($articulos){ foreach($articulos->Categoria as$rs){ $categoria=(字符串)$rs->TxCategoria; $subCat=(字符串)$rs->SubCategoria[0]->TxSubCategoria; $cod=(字符串)$rs->子类别[0]->子类别2[0]->零件号; $stock=(字符串)$rs->子类别[0]->子类别2[0]->股票; $precio=(字符串)$rs->子类别[0]->子类别2[0]->precio; $fabricante=(字符串)$rs->SubCategoria[0]->SubCategoria2[0]->fabricante; $ean=(字符串)$rs->子类别[0]->子类别2[0]->ean; $description=(字符串)$rs->SubCategoria[0]->SubCategoria2[0]->description; $canon=(字符串)$rs->SubCategoria[0]->SubCategoria2[0]->canon; $desc=mysql\u real\u escape\u字符串($description); $sql2=“插入'activadosmil'中” 设置cod=“.trim($cod)。”,stock=“.trim($stock)。”,precio=“.trim($precio)。”,categoria=“$categoria”。”, 子类别=“$subCat.”,description=“$desc.”,ean=“.trim($ean)。”,canon=“.trim($precio)。”,fabricante=“.trim($fabricante)。”; mysql\u query($sql2)或die(mysql\u error()。“
”$sql2); } }else echo“
无效的XML轴”; }否则回显“
打开错误”。$archivo;
/*示例XML代码*/

<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>

阿拉木图
卡卡萨斯迪斯科杜洛酒店
2,5"
5Vetrixalu3,5
塔肯斯
4710700954461
监控华硕LED和PIP 27 VE278Q
12.37
0
0

有没有办法用simplexml加载格式错误的xml文件?或者从标记中转义字符


提前感谢各位

如果您的问题与您的问题一样幼稚,那么这里有一个幼稚的解决方案

您可以首先以字符串形式获取文件内容:

$contents = file_get_contents($archivo);
然后,您可以运行str_replace,将所有出现的
&
替换为
&;

$contents = str_replace('&', '&amp;', $contents);
现在,将转义字符串加载到simplexml中:

$articulos = simplexml_load_string($contents);

是的,我的问题听起来很幼稚:p谢谢。