PHP - Recorrer XML con formato un poco peculiar ... para mi

 
Vista:
sin imagen de perfil
Val: 58
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Recorrer XML con formato un poco peculiar ... para mi

Publicado por Marta (39 intervenciones) el 15/12/2020 09:39:24
Buenas, tengo que importar unos datos a nuestro CRM procedentes de un fichero xml, pero no consigo acceder a la información. No formulo la pregunta sin más, llevo ya mucho intentándolo y no hay manera. Si alguien puede guiarme? Muchas gracias

Más o menos lo que intento es:
1
2
3
4
$file = "fichero.xml"; // file name or path to file
$xml = simplexml_load_file($file) or die("Error: no se puede leer el fichero");
foreach($xml->transactions->transaction->bom as $rr)
    echo $rr->bomrow[0]->bomcell[0];

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<xml>
<transactions>
<transaction date="1602076307" type="export_bom_spreadsheet" vaultname="EMPRESA">
<bom config_id="5" config_name="Default" document_id="48" document_path="\TEST\Lower_Brace.SLDASM" type="0">
<bomheader>
<bomcol col_no="0" name="Referencia"/>
<bomcol col_no="1" name="Referencia Comercial"/>
<bomcol col_no="2" name="Revision"/>
<bomcol alignment="right" col_no="3" name="Cantidad"/>
<bomcol col_no="4" name="Denominacion"/>
<bomcol col_no="5" name="Denomination"/>
<bomcol col_no="6" name="Material"/>
<bomcol col_no="7" name="Acabado"/>
<bomcol col_no="8" name="Color"/>
<bomcol col_no="9" name="Trat. Termico"/>
</bomheader>
<bomrow document_id="48" path="\TEST\Lower_Brace.SLDASM" row_no="0">
<bomcell col_no="0" value="100000007"/>
<bomcell col_no="1" value=""/>
<bomcell col_no="2" value="00"/>
<bomcell col_no="3" value="1.0"/>
<bomcell col_no="4" value=""/>
<bomcell col_no="5" value=""/>
<bomcell col_no="6" value=""/>
<bomcell col_no="7" value=""/>
<bomcell col_no="8" value=""/>
<bomcell col_no="9" value=""/>
</bomrow>
<bomrow document_id="50" path="\TEST\Brace_Cross_Bar.SLDPRT" row_no="1">
<bomcell col_no="0" value="200000011"/>
<bomcell col_no="1" value=""/>
<bomcell col_no="2" value=""/>
<bomcell col_no="3" value="1.0"/>
<bomcell col_no="4" value=""/>
<bomcell col_no="5" value=""/>
<bomcell col_no="6" value="AISI Type 316L stainless steel"/>
<bomcell col_no="7" value=""/>
<bomcell col_no="8" value=""/>
<bomcell col_no="9" value=""/>
</bomrow>
<bomrow document_id="51" path="\TEST\Brace_Corner.SLDPRT" row_no="2">
<bomcell col_no="0" value="200000010"/>
<bomcell col_no="1" value=""/>
<bomcell col_no="2" value=""/>
<bomcell col_no="3" value="2.0"/>
<bomcell col_no="4" value=""/>
<bomcell col_no="5" value=""/>
<bomcell col_no="6" value="AISI 316 Stainless Steel Sheet (SS)"/>
<bomcell col_no="7" value=""/>
<bomcell col_no="8" value=""/>
<bomcell col_no="9" value=""/>
</bomrow>
</bom>
</transaction>
</transactions>
</xml>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Felix
Val: 47
Ha disminuido su posición en 26 puestos en PHP (en relación al último mes)
Gráfica de PHP

Recorrer XML con formato un poco peculiar ... para mi

Publicado por Felix (32 intervenciones) el 15/12/2020 13:18:28
Saludo!

No soy un experto en la materia pero creo que te falta declarar el nuevo documento, algo como así:

1
$xml = new SimpleXMLElement( 'fichero.xml' );

Y luego podrías intentarlo con XPATH:

1
2
3
4
5
$xml = new SimpleXMLElement( 'fichero.xml' );
 
$elementos = $xml->xpath('/bomrow/bomcell');
 
echo bomrow[0]->bomcell[0];

Y por su puesto no se te olvide leer la documentación de SimpleXML https://www.php.net/manual/es/book.simplexml.php

Espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 58
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Recorrer XML con formato un poco peculiar ... para mi

Publicado por Marta (39 intervenciones) el 15/12/2020 13:42:48
Gracias por tu aporte. La verdad es que no domino para nada este tema y llevaba ya tiempo con ello. He buscado y leído mucho, y una vez lo resuelves, como todo, te dices ... con lo fácil que es.
La pista me la ha dado SimpleXMLElement, aunque lo he resuelto así, por si a alguien le sirve:

1
2
3
4
5
6
7
8
9
10
11
<?php
$file = "ImportarConjunto.xml"; // file name or path to file
$xml = simplexml_load_file($file) or die("Error: no es pot llegir el fitxer");
 
$elements = count ($xml->transactions->transaction->bom->bomrow);
for ($i=0; $i<$elements; $i++) {
    echo "Referencia: ".$xml->transactions->transaction->bom->bomrow[$i]->bomcell[0]->attributes()->value."<br/>";
    echo "Cantidad: ".$xml->transactions->transaction->bom->bomrow[$i]->bomcell[3]->attributes()->value."<br/>";
    echo "Denominación: ".$xml->transactions->transaction->bom->bomrow[$i]->bomcell[4]->attributes()->value."<br/>";
    echo "Material: ".$xml->transactions->transaction->bom->bomrow[$i]->bomcell[6]->attributes()->value."<br/>";
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Recorrer XML con formato un poco peculiar ... para mi

Publicado por Mauro (1036 intervenciones) el 15/12/2020 13:31:57
Hola Marta:

El problema es que el XML guarda los valores dentro de los atributos de los tags, para accederlos debes usar algo como:

1
echo $rr->bomrow[0]->bomcell[0]->attributes()->value[0];

De paso, te sugiero usar alguna herramienta de formateo de XML para darle más legibilidad, por ejemplo esta.

Coméntame si te queda alguna duda ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 58
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Recorrer XML con formato un poco peculiar ... para mi

Publicado por Marta (39 intervenciones) el 15/12/2020 13:43:44
Muchas gracias, esta herramienta me parece muy útil, creo que me ayudará
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar