PHP - Modificar atributos en archivo xml

 
Vista:
Imágen de perfil de Nacho
Val: 19
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Modificar atributos en archivo xml

Publicado por Nacho (13 intervenciones) el 24/02/2021 12:12:20
Hola

Tengo un archivo XML, del cual necesito modificar el valor del atributo "Precio", dejándolo en 0, en todos los registros que cumplan la condición de que el atributo "Ubicacion" sea igual a "Montada revisada" y el atributo "Precio" sea distinto de 0.
Una vez modificados los valores, debo reescribir el xml con los valores actualizados.

¿Puede alguien echarme una mano por favor? Llevo tiempo con esto y no consigo hacerlo funcionar.

Gracias y Salu2
Nacho

Dejo aquí una parte del archivo como ejemplo para hacer pruebas.

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<?xml version="1.0" encoding="UTF-8"?>
<ArrayOfPiezaExp>
<PiezaExp RefId="91008" RefPieza="" Atributo1="" Atributo2="" AnoStock="1997" Precio="24.79" Descuento="0" Peso="10" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Almacenada" Observaciones="" >
  <Familia>
    <Descripcion>ELECTRICIDAD</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>MOTOR ARRANQUE</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>CITROEN</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>XSARA BREAK</Descripcion>
    <Inicio >1997</Inicio>
    <Fin >2006</Fin>
  </Modelo>
  <Version>
    <Descripcion>CITROEN XSARA BREAK 1.6</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="oqTe6lJCzMucIqWXYY1SsA==.jpeg" Defecto="1" />
    <ImagenExp Fichero="oqTe6lJCzMsIOfAzrQW1pA==.jpeg" Defecto="0" />
    <ImagenExp Fichero="oqTe6lJCzMvCmCu5XP1WuA==.jpeg" Defecto="0" />
  </Imagenes>
</PiezaExp>
<PiezaExp RefId="91248" RefPieza="0123320007" Atributo1="" Atributo2="029903025Q" AnoStock="1995" Precio="41.32" Descuento="0" Peso="10" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Montada revisada" Puertas="3" Observaciones="90A" >
  <Familia>
    <Descripcion>ELECTRICIDAD</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>ALTERNADOR</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>SEAT</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>IBIZA</Descripcion>
    <Inicio >1993</Inicio>
    <Fin >1999</Fin>
  </Modelo>
  <Version>
    <Descripcion>SEAT IBIZA Básico</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="WofzNxvMRJE8v8whWrNWCA==.jpeg" Defecto="1" />
    <ImagenExp Fichero="WofzNxvMRJFNqCjcMX2NwQ==.jpeg" Defecto="0" />
    <ImagenExp Fichero="WofzNxvMRJH6CCNpjd6LNA==.jpeg" Defecto="0" />
    <ImagenExp Fichero="WofzNxvMRJGr1PwB2-OsZA==.jpeg" Defecto="0" />
  </Imagenes>
  <Vehiculo  Codigo="00003-19" Bastidor="XXXXXXXXXXX" CodigoMotor="" CodigoCambio="" Combustible="GASOLINA" Color="ROJO" Ano="1995" Puertas="3" Kilometraje="0" Observaciones="">
    <Version>
      <Descripcion>SEAT IBIZA Básico</Descripcion>
    </Version>
    <Imagenes>
      <ImagenExp Fichero="oqTe6lJCzMspLJQSFVcULQ==.jpeg" Defecto="1" />
      <ImagenExp Fichero="oqTe6lJCzMsCUuXjI5-7sw==.jpeg" Defecto="0" />
      <ImagenExp Fichero="oqTe6lJCzMtBV6AaZLS3AQ==.jpeg" Defecto="0" />
      <ImagenExp Fichero="oqTe6lJCzMsEuy7YSRULIA==.jpeg" Defecto="0" />
    </Imagenes>
  </Vehiculo>
</PiezaExp>
<PiezaExp RefId="91268" RefPieza="0040402001" Atributo1="" Atributo2="" AnoStock="1995" Precio="0.00" Descuento="0" Peso="5" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Montada revisada" Puertas="3" Observaciones="3 PINES" >
  <Familia>
    <Descripcion>ELECTRICIDAD</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>BOBINA ENCENDIDO</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>SEAT</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>IBIZA</Descripcion>
    <Inicio >1993</Inicio>
    <Fin >1999</Fin>
  </Modelo>
  <Version>
    <Descripcion>SEAT IBIZA Básico</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="WofzNxvMRJG8sXQYtD5QIA==.jpeg" Defecto="1" />
    <ImagenExp Fichero="WofzNxvMRJGrmx1DAscaHw==.jpeg" Defecto="0" />
    <ImagenExp Fichero="WofzNxvMRJGLNihtfQ1wNg==.jpeg" Defecto="0" />
    <ImagenExp Fichero="WofzNxvMRJENEWNpSvX-GQ==.jpeg" Defecto="0" />
  </Imagenes>
  <Vehiculo  Codigo="00003-19" Bastidor="ZZZZZZZZZZZ" CodigoMotor="" CodigoCambio="" Combustible="GASOLINA" Color="ROJO" Ano="1995" Puertas="3" Kilometraje="0" Observaciones="">
    <Version>
      <Descripcion>SEAT IBIZA Básico</Descripcion>
    </Version>
    <Imagenes>
      <ImagenExp Fichero="oqTe6lJCzMspLJQSFVcULQ==" Defecto="1" />
      <ImagenExp Fichero="oqTe6lJCzMsCUuXjI5-7sw==" Defecto="0" />
      <ImagenExp Fichero="oqTe6lJCzMtBV6AaZLS3AQ==" Defecto="0" />
      <ImagenExp Fichero="oqTe6lJCzMsEuy7YSRULIA==" Defecto="0" />
    </Imagenes>
  </Vehiculo>
</PiezaExp>
<PiezaExp RefId="91272" RefPieza="1H0422155E" Atributo1="" Atributo2="" AnoStock="1995" Precio="0" Descuento="0" Peso="20" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Almacenada" Puertas="3" Observaciones="" >
  <Familia>
    <Descripcion>DIRECCION / TRANSMISION</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>BOMBA DIRECCION</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>SEAT</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>IBIZA</Descripcion>
    <Inicio >1993</Inicio>
    <Fin >1999</Fin>
  </Modelo>
  <Version>
    <Descripcion>SEAT IBIZA Básico</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="WofzNxvMRJFU0tMz7EAVeg==.jpeg" Defecto="1" />
    <ImagenExp Fichero="WofzNxvMRJFGAwp9Vb5Szw==.jpeg" Defecto="0" />
    <ImagenExp Fichero="WofzNxvMRJH6hHixMc0eDg==.jpeg" Defecto="0" />
  </Imagenes>
  <Vehiculo  Codigo="00003-19" Bastidor="YYYYYYYYYYY" CodigoMotor="" CodigoCambio="" Combustible="GASOLINA" Color="ROJO" Ano="1995" Puertas="3" Kilometraje="0" Observaciones="">
    <Version>
      <Descripcion>SEAT IBIZA Básico</Descripcion>
    </Version>
    <Imagenes>
      <ImagenExp Fichero="oqTe6lJCzMspLJQSFVcULQ==" Defecto="1" />
      <ImagenExp Fichero="oqTe6lJCzMsCUuXjI5-7sw==" Defecto="0" />
      <ImagenExp Fichero="oqTe6lJCzMtBV6AaZLS3AQ==" Defecto="0" />
      <ImagenExp Fichero="oqTe6lJCzMsEuy7YSRULIA==" Defecto="0" />
    </Imagenes>
  </Vehiculo>
</PiezaExp>
<PiezaExp RefId="91292" RefPieza="6K0919506" Atributo1="" Atributo2="SH0 898846000" AnoStock="1995" Precio="0" Descuento="0" Peso="5" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Revisada" Puertas="3" Observaciones="" >
  <Familia>
    <Descripcion>ELECTRICIDAD</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>CAJA PRECALENTAMIENTO</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>SEAT</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>IBIZA</Descripcion>
    <Inicio >1993</Inicio>
    <Fin >1999</Fin>
  </Modelo>
  <Version>
    <Descripcion>SEAT IBIZA Básico</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="WofzNxvMRJGiOs9hn0sbGg==.jpeg" Defecto="1" />
    <ImagenExp Fichero="WofzNxvMRJHu7FDVyFVb1w==.jpeg" Defecto="0" />
    <ImagenExp Fichero="WofzNxvMRJEK9a4vSLmdHA==.jpeg" Defecto="0" />
    <ImagenExp Fichero="WofzNxvMRJGZg3p3T6yYAA==.jpeg" Defecto="0" />
  </Imagenes>
  <Vehiculo  Codigo="00003-19" Bastidor="WWWWWWWWWWW" CodigoMotor="" CodigoCambio="" Combustible="GASOLINA" Color="ROJO" Ano="1995" Puertas="3" Kilometraje="0" Observaciones="">
    <Version>
      <Descripcion>SEAT IBIZA Básico</Descripcion>
    </Version>
    <Imagenes>
      <ImagenExp Fichero="oqTe6lJCzMspLJQSFVcULQ==" Defecto="1" />
      <ImagenExp Fichero="oqTe6lJCzMsCUuXjI5-7sw==" Defecto="0" />
      <ImagenExp Fichero="oqTe6lJCzMtBV6AaZLS3AQ==" Defecto="0" />
      <ImagenExp Fichero="oqTe6lJCzMsEuy7YSRULIA==" Defecto="0" />
    </Imagenes>
  </Vehiculo>
</PiezaExp>
</ArrayOfPiezaExp>
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 Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Modificar atributos en archivo xml

Publicado por Mauro (1047 intervenciones) el 24/02/2021 13:42:20
Hola Nacho:

La mejor opción para manipular XML usando PHP es SimpleXMLElement.

Específicamente para tu problema yo usaría el método xpath con la expresión //PiezaExp[@Ubicacion="Montada revisada"][@Precio>0]
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
Imágen de perfil de Nacho
Val: 19
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Modificar atributos en archivo xml

Publicado por Nacho (13 intervenciones) el 24/02/2021 13:59:37
Gracias Mauro por el aporte.

Efectivamente estoy empleando SimpleXMLElement.
El problema es que no consigo que la instrucción 'if' funcione, y estoy completamente seguro que es porque no hago la comparación de la forma correcta.
Seguiré intentándolo.

Salu2
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

Modificar atributos en archivo xml

Publicado por Mauro (1047 intervenciones) el 25/02/2021 13:52:15
¿A qué if te refieres? ¿Puedes publicar código?
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
Imágen de perfil de Nacho
Val: 19
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Modificar atributos en archivo xml

Publicado por Nacho (13 intervenciones) el 25/02/2021 16:26:50
Ya tengo la solución. Funciona perfecto. Aunque hay algo que no termino de entender.
Según mi código, yo hago modificaciones en $pieza, pero los cambios quedan reflejados en $piezas. ¿Es acaso $pieza un enlace simbólico a $piezas? Soy nuevo en PHP y pensaba que se trataba de objetos independientes.

Gracias.
Nacho

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
//	------- Fecha creación: 2021-02-25
//	------- Autor: Nacho
//	------- Fecha última modificación:
//	------- Autor:
 
//	Obtenemos el archivo xml para reemplazar los valores (Nacho)
	$piezas = simplexml_load_file('/media/export/001/crvnet_export.xml');
//	Recorremos los nodos que contienen la información de las piezas (Nacho)
	foreach ($piezas->xpath('//PiezaExp') as $pieza){
//		Filtramos las piezas que estén Montada revisada y con precio distinto de 0 (Nacho)
		if ($pieza->attributes()['Ubicacion'] == 'Montada revisada' && $pieza->attributes()['Precio'] != 0){
//			Cambiamos la ubicación a Almacenada y el precio a 0 (Nacho)
			$pieza->attributes()['Ubicacion'] = 'Almacenada';
			$pieza->attributes()['Precio'] = '0';
		}
	}
//	Guardamos los cambios (Nacho)
	$piezas->asXml('/media/export/001/crvnet_export.xml');
?>
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 Nacho
Val: 19
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Modificar atributos en archivo xml

Publicado por Nacho (13 intervenciones) el 26/02/2021 08:41:48
Vaya!

Ahora sí que no entiendo nada de nada!

Con el ejemplo que puse funciona perfectamente, pero con el archivo completo no hace ningún cambio.

¿Alguna idea?
Gracias!
Nacho
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

Modificar atributos en archivo xml

Publicado por Mauro (1047 intervenciones) el 26/02/2021 13:22:47
Hola Nacho:

Sobre lo que comentas ¿Es acaso $pieza un enlace simbólico a $piezas? no es un "enlace simbólico" aunque tampoco es un objeto 100% independiente.

El XML se analiza y con él se arma un árbol tipo DOM. Cada nodo ($pieza) es un objeto SimpleXMLElement pero, a la vez, es parte de la colección de nodos perteneciente a $piezas.

Lo que yo te comentaba que hicieras es algo como:

1
2
3
4
5
foreach ($piezas->xpath('//PiezaExp[@Ubicacion="Montada revisada"][@Precio>0]') as $pieza){
        $pieza['Ubicacion'] = 'Almacenada';
        $pieza['Precio'] = '0';
    }
}
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
Imágen de perfil de Nacho
Val: 19
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Modificar atributos en archivo xml

Publicado por Nacho (13 intervenciones) el 26/02/2021 14:49:57
Muchas gracias por tu aporte, Mauro.

El código así queda mucho más limpio. Pero sigo sin que me grabe los cambios en el xml generado.
Ya me pierdo. No sé cómo "trasladar" esos cambios de $pieza a $piezas.

¿Te importa arrojar un poco de luz a mi ignorancia principiante?
Gracias
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

Modificar atributos en archivo xml

Publicado por Mauro (1047 intervenciones) el 26/02/2021 19:00:45
Hola Nacho... no veo el problema que me comentas.

Hice una prueba con este código:

1
2
3
4
5
6
7
8
9
<?php
$piezas = simplexml_load_file($argv[1]);
 
foreach ($piezas->xpath('//PiezaExp[@Ubicacion="Montada revisada"][@Precio>0]') as $pieza){
        echo 'Processing '.$pieza['RefId'].PHP_EOL;
        $pieza['Ubicacion'] = 'Almacenada';
        $pieza['Precio'] = '0';
}
$piezas->asXml($argv[2]);

Y el archivo de input que indicaste:

1
php test.php in.xml out.xml

Y el archivo out.xml se ve asi:

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<?xml version="1.0" encoding="UTF-8"?>
<ArrayOfPiezaExp>
<PiezaExp RefId="91008" RefPieza="" Atributo1="" Atributo2="" AnoStock="1997" Precio="24.79" Descuento="0" Peso="10" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Almacenada" Observaciones="">
  <Familia>
    <Descripcion>ELECTRICIDAD</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>MOTOR ARRANQUE</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>CITROEN</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>XSARA BREAK</Descripcion>
    <Inicio>1997</Inicio>
    <Fin>2006</Fin>
  </Modelo>
  <Version>
    <Descripcion>CITROEN XSARA BREAK 1.6</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="oqTe6lJCzMucIqWXYY1SsA==.jpeg" Defecto="1"/>
    <ImagenExp Fichero="oqTe6lJCzMsIOfAzrQW1pA==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="oqTe6lJCzMvCmCu5XP1WuA==.jpeg" Defecto="0"/>
  </Imagenes>
</PiezaExp>
<PiezaExp RefId="91248" RefPieza="0123320007" Atributo1="" Atributo2="029903025Q" AnoStock="1995" Precio="41.32" Descuento="0" Peso="10" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Montada revisada" Puertas="3" Observaciones="90A">
  <Familia>
    <Descripcion>ELECTRICIDAD</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>ALTERNADOR</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>SEAT</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>IBIZA</Descripcion>
    <Inicio>1993</Inicio>
    <Fin>1999</Fin>
  </Modelo>
  <Version>
    <Descripcion>SEAT IBIZA Básico</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="WofzNxvMRJE8v8whWrNWCA==.jpeg" Defecto="1"/>
    <ImagenExp Fichero="WofzNxvMRJFNqCjcMX2NwQ==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJH6CCNpjd6LNA==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJGr1PwB2-OsZA==.jpeg" Defecto="0"/>
  </Imagenes>
  <Vehiculo Codigo="00003-19" Bastidor="XXXXXXXXXXX" CodigoMotor="" CodigoCambio="" Combustible="GASOLINA" Color="ROJO" Ano="1995" Puertas="3" Kilometraje="0" Observaciones="">
    <Version>
      <Descripcion>SEAT IBIZA Básico</Descripcion>
    </Version>
    <Imagenes>
      <ImagenExp Fichero="oqTe6lJCzMspLJQSFVcULQ==.jpeg" Defecto="1"/>
      <ImagenExp Fichero="oqTe6lJCzMsCUuXjI5-7sw==.jpeg" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMtBV6AaZLS3AQ==.jpeg" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMsEuy7YSRULIA==.jpeg" Defecto="0"/>
    </Imagenes>
  </Vehiculo>
</PiezaExp>
<PiezaExp RefId="91268" RefPieza="0040402001" Atributo1="" Atributo2="" AnoStock="1995" Precio="0.00" Descuento="0" Peso="5" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Montada revisada" Puertas="3" Observaciones="3 PINES">
  <Familia>
    <Descripcion>ELECTRICIDAD</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>BOBINA ENCENDIDO</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>SEAT</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>IBIZA</Descripcion>
    <Inicio>1993</Inicio>
    <Fin>1999</Fin>
  </Modelo>
  <Version>
    <Descripcion>SEAT IBIZA Básico</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="WofzNxvMRJG8sXQYtD5QIA==.jpeg" Defecto="1"/>
    <ImagenExp Fichero="WofzNxvMRJGrmx1DAscaHw==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJGLNihtfQ1wNg==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJENEWNpSvX-GQ==.jpeg" Defecto="0"/>
  </Imagenes>
  <Vehiculo Codigo="00003-19" Bastidor="ZZZZZZZZZZZ" CodigoMotor="" CodigoCambio="" Combustible="GASOLINA" Color="ROJO" Ano="1995" Puertas="3" Kilometraje="0" Observaciones="">
    <Version>
      <Descripcion>SEAT IBIZA Básico</Descripcion>
    </Version>
    <Imagenes>
      <ImagenExp Fichero="oqTe6lJCzMspLJQSFVcULQ==" Defecto="1"/>
      <ImagenExp Fichero="oqTe6lJCzMsCUuXjI5-7sw==" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMtBV6AaZLS3AQ==" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMsEuy7YSRULIA==" Defecto="0"/>
    </Imagenes>
  </Vehiculo>
</PiezaExp>
<PiezaExp RefId="91272" RefPieza="1H0422155E" Atributo1="" Atributo2="" AnoStock="1995" Precio="0" Descuento="0" Peso="20" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Almacenada" Puertas="3" Observaciones="">
  <Familia>
    <Descripcion>DIRECCION / TRANSMISION</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>BOMBA DIRECCION</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>SEAT</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>IBIZA</Descripcion>
    <Inicio>1993</Inicio>
    <Fin>1999</Fin>
  </Modelo>
  <Version>
    <Descripcion>SEAT IBIZA Básico</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="WofzNxvMRJFU0tMz7EAVeg==.jpeg" Defecto="1"/>
    <ImagenExp Fichero="WofzNxvMRJFGAwp9Vb5Szw==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJH6hHixMc0eDg==.jpeg" Defecto="0"/>
  </Imagenes>
  <Vehiculo Codigo="00003-19" Bastidor="YYYYYYYYYYY" CodigoMotor="" CodigoCambio="" Combustible="GASOLINA" Color="ROJO" Ano="1995" Puertas="3" Kilometraje="0" Observaciones="">
    <Version>
      <Descripcion>SEAT IBIZA Básico</Descripcion>
    </Version>
    <Imagenes>
      <ImagenExp Fichero="oqTe6lJCzMspLJQSFVcULQ==" Defecto="1"/>
      <ImagenExp Fichero="oqTe6lJCzMsCUuXjI5-7sw==" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMtBV6AaZLS3AQ==" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMsEuy7YSRULIA==" Defecto="0"/>
    </Imagenes>
  </Vehiculo>
</PiezaExp>
<PiezaExp RefId="91292" RefPieza="6K0919506" Atributo1="" Atributo2="SH0 898846000" AnoStock="1995" Precio="0" Descuento="0" Peso="5" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Revisada" Puertas="3" Observaciones="">
  <Familia>
    <Descripcion>ELECTRICIDAD</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>CAJA PRECALENTAMIENTO</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>SEAT</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>IBIZA</Descripcion>
    <Inicio>1993</Inicio>
    <Fin>1999</Fin>
  </Modelo>
  <Version>
    <Descripcion>SEAT IBIZA Básico</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="WofzNxvMRJGiOs9hn0sbGg==.jpeg" Defecto="1"/>
    <ImagenExp Fichero="WofzNxvMRJHu7FDVyFVb1w==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJEK9a4vSLmdHA==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJGZg3p3T6yYAA==.jpeg" Defecto="0"/>
  </Imagenes>
  <Vehiculo Codigo="00003-19" Bastidor="WWWWWWWWWWW" CodigoMotor="" CodigoCambio="" Combustible="GASOLINA" Color="ROJO" Ano="1995" Puertas="3" Kilometraje="0" Observaciones="">
    <Version>
      <Descripcion>SEAT IBIZA Básico</Descripcion>
    </Version>
    <Imagenes>
      <ImagenExp Fichero="oqTe6lJCzMspLJQSFVcULQ==" Defecto="1"/>
      <ImagenExp Fichero="oqTe6lJCzMsCUuXjI5-7sw==" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMtBV6AaZLS3AQ==" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMsEuy7YSRULIA==" Defecto="0"/>
    </Imagenes>
  </Vehiculo>
</PiezaExp>
</ArrayOfPiezaExp>

¿No es correcto ese resultado?
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
Imágen de perfil de Nacho
Val: 19
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Modificar atributos en archivo xml

Publicado por Nacho (13 intervenciones) el 01/03/2021 08:11:00
Hola Mauro

Gracias por tu respuesta.
El resultado no es correcto.
Si te fijas, las líneas donde originalmente están los atributos así:

Ubicacion = "Montada revisada"
Precio = "XX" (siendo XX un valor distinto de 0)

Deberían haber quedado así en el archivo de salida:

Ubicacion = "Almacenada"
Precio = "0"

Eso es lo que no veo la forma de hacer que funcione. Parece ser que los cambios se hacen en $pieza, que es cada uno de los elementos del objeto principal $piezas, pero los cambios deberían reflejarse y por lo tanto grabarse en el objeto $piezas.

Soy novato en php, y no sé cómo acceder a esos atributos en el objeto principal para modificar sus valores.

Debería ser algo así como (pero bien escrito por supuesto):

$piezas->$pieza->attributes()['Ubicacion'] = 'Almacenada';
$piezas->$pieza->attributes()['Precio'] = '0';

Para que el valor quedara registrado en $piezas y poder así volcar al nuevo archivo los cambios realizados, no sé si me explico.

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

Modificar atributos en archivo xml

Publicado por Mauro (1047 intervenciones) el 02/03/2021 14:26:11
Me parece que me equivoqué en el resultado que pegué antes... acabo de probar el código y me da el resultado que esperás:

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<?xml version="1.0" encoding="UTF-8"?>
<ArrayOfPiezaExp>
<PiezaExp RefId="91008" RefPieza="" Atributo1="" Atributo2="" AnoStock="1997" Precio="24.79" Descuento="0" Peso="10" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Almacenada" Observaciones="">
  <Familia>
    <Descripcion>ELECTRICIDAD</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>MOTOR ARRANQUE</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>CITROEN</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>XSARA BREAK</Descripcion>
    <Inicio>1997</Inicio>
    <Fin>2006</Fin>
  </Modelo>
  <Version>
    <Descripcion>CITROEN XSARA BREAK 1.6</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="oqTe6lJCzMucIqWXYY1SsA==.jpeg" Defecto="1"/>
    <ImagenExp Fichero="oqTe6lJCzMsIOfAzrQW1pA==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="oqTe6lJCzMvCmCu5XP1WuA==.jpeg" Defecto="0"/>
  </Imagenes>
</PiezaExp>
<PiezaExp RefId="91248" RefPieza="0123320007" Atributo1="" Atributo2="029903025Q" AnoStock="1995" Precio="0" Descuento="0" Peso="10" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Almacenada" Puertas="3" Observaciones="90A">
  <Familia>
    <Descripcion>ELECTRICIDAD</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>ALTERNADOR</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>SEAT</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>IBIZA</Descripcion>
    <Inicio>1993</Inicio>
    <Fin>1999</Fin>
  </Modelo>
  <Version>
    <Descripcion>SEAT IBIZA Básico</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="WofzNxvMRJE8v8whWrNWCA==.jpeg" Defecto="1"/>
    <ImagenExp Fichero="WofzNxvMRJFNqCjcMX2NwQ==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJH6CCNpjd6LNA==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJGr1PwB2-OsZA==.jpeg" Defecto="0"/>
  </Imagenes>
  <Vehiculo Codigo="00003-19" Bastidor="XXXXXXXXXXX" CodigoMotor="" CodigoCambio="" Combustible="GASOLINA" Color="ROJO" Ano="1995" Puertas="3" Kilometraje="0" Observaciones="">
    <Version>
      <Descripcion>SEAT IBIZA Básico</Descripcion>
    </Version>
    <Imagenes>
      <ImagenExp Fichero="oqTe6lJCzMspLJQSFVcULQ==.jpeg" Defecto="1"/>
      <ImagenExp Fichero="oqTe6lJCzMsCUuXjI5-7sw==.jpeg" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMtBV6AaZLS3AQ==.jpeg" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMsEuy7YSRULIA==.jpeg" Defecto="0"/>
    </Imagenes>
  </Vehiculo>
</PiezaExp>
<PiezaExp RefId="91268" RefPieza="0040402001" Atributo1="" Atributo2="" AnoStock="1995" Precio="0.00" Descuento="0" Peso="5" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Montada revisada" Puertas="3" Observaciones="3 PINES">
  <Familia>
    <Descripcion>ELECTRICIDAD</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>BOBINA ENCENDIDO</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>SEAT</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>IBIZA</Descripcion>
    <Inicio>1993</Inicio>
    <Fin>1999</Fin>
  </Modelo>
  <Version>
    <Descripcion>SEAT IBIZA Básico</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="WofzNxvMRJG8sXQYtD5QIA==.jpeg" Defecto="1"/>
    <ImagenExp Fichero="WofzNxvMRJGrmx1DAscaHw==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJGLNihtfQ1wNg==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJENEWNpSvX-GQ==.jpeg" Defecto="0"/>
  </Imagenes>
  <Vehiculo Codigo="00003-19" Bastidor="ZZZZZZZZZZZ" CodigoMotor="" CodigoCambio="" Combustible="GASOLINA" Color="ROJO" Ano="1995" Puertas="3" Kilometraje="0" Observaciones="">
    <Version>
      <Descripcion>SEAT IBIZA Básico</Descripcion>
    </Version>
    <Imagenes>
      <ImagenExp Fichero="oqTe6lJCzMspLJQSFVcULQ==" Defecto="1"/>
      <ImagenExp Fichero="oqTe6lJCzMsCUuXjI5-7sw==" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMtBV6AaZLS3AQ==" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMsEuy7YSRULIA==" Defecto="0"/>
    </Imagenes>
  </Vehiculo>
</PiezaExp>
<PiezaExp RefId="91272" RefPieza="1H0422155E" Atributo1="" Atributo2="" AnoStock="1995" Precio="0" Descuento="0" Peso="20" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Almacenada" Puertas="3" Observaciones="">
  <Familia>
    <Descripcion>DIRECCION / TRANSMISION</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>BOMBA DIRECCION</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>SEAT</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>IBIZA</Descripcion>
    <Inicio>1993</Inicio>
    <Fin>1999</Fin>
  </Modelo>
  <Version>
    <Descripcion>SEAT IBIZA Básico</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="WofzNxvMRJFU0tMz7EAVeg==.jpeg" Defecto="1"/>
    <ImagenExp Fichero="WofzNxvMRJFGAwp9Vb5Szw==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJH6hHixMc0eDg==.jpeg" Defecto="0"/>
  </Imagenes>
  <Vehiculo Codigo="00003-19" Bastidor="YYYYYYYYYYY" CodigoMotor="" CodigoCambio="" Combustible="GASOLINA" Color="ROJO" Ano="1995" Puertas="3" Kilometraje="0" Observaciones="">
    <Version>
      <Descripcion>SEAT IBIZA Básico</Descripcion>
    </Version>
    <Imagenes>
      <ImagenExp Fichero="oqTe6lJCzMspLJQSFVcULQ==" Defecto="1"/>
      <ImagenExp Fichero="oqTe6lJCzMsCUuXjI5-7sw==" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMtBV6AaZLS3AQ==" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMsEuy7YSRULIA==" Defecto="0"/>
    </Imagenes>
  </Vehiculo>
</PiezaExp>
<PiezaExp RefId="91292" RefPieza="6K0919506" Atributo1="" Atributo2="SH0 898846000" AnoStock="1995" Precio="0" Descuento="0" Peso="5" GastosEnvio="0" Estado="Material de segunda mano" Ubicacion="Revisada" Puertas="3" Observaciones="">
  <Familia>
    <Descripcion>ELECTRICIDAD</Descripcion>
  </Familia>
  <Articulo>
    <Descripcion>CAJA PRECALENTAMIENTO</Descripcion>
  </Articulo>
  <Marca>
    <Descripcion>SEAT</Descripcion>
  </Marca>
  <Modelo>
    <Descripcion>IBIZA</Descripcion>
    <Inicio>1993</Inicio>
    <Fin>1999</Fin>
  </Modelo>
  <Version>
    <Descripcion>SEAT IBIZA Básico</Descripcion>
  </Version>
  <Imagenes>
    <ImagenExp Fichero="WofzNxvMRJGiOs9hn0sbGg==.jpeg" Defecto="1"/>
    <ImagenExp Fichero="WofzNxvMRJHu7FDVyFVb1w==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJEK9a4vSLmdHA==.jpeg" Defecto="0"/>
    <ImagenExp Fichero="WofzNxvMRJGZg3p3T6yYAA==.jpeg" Defecto="0"/>
  </Imagenes>
  <Vehiculo Codigo="00003-19" Bastidor="WWWWWWWWWWW" CodigoMotor="" CodigoCambio="" Combustible="GASOLINA" Color="ROJO" Ano="1995" Puertas="3" Kilometraje="0" Observaciones="">
    <Version>
      <Descripcion>SEAT IBIZA Básico</Descripcion>
    </Version>
    <Imagenes>
      <ImagenExp Fichero="oqTe6lJCzMspLJQSFVcULQ==" Defecto="1"/>
      <ImagenExp Fichero="oqTe6lJCzMsCUuXjI5-7sw==" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMtBV6AaZLS3AQ==" Defecto="0"/>
      <ImagenExp Fichero="oqTe6lJCzMsEuy7YSRULIA==" Defecto="0"/>
    </Imagenes>
  </Vehiculo>
</PiezaExp>
</ArrayOfPiezaExp>

La única pieza que coincide con el criterio en el archivo original es la 91248, fijate que aquí cambió el precio y la ubicación.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Nacho
Val: 19
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Modificar atributos en archivo xml

Publicado por Nacho (13 intervenciones) el 02/03/2021 15:38:25
Hola Mauro

Perfecto!!

Eso es exactamente lo que quería.
Muchas gracias por tu amabilidad y ayuda.

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

Modificar atributos en archivo xml

Publicado por Mauro (1047 intervenciones) el 05/03/2021 19:45:51
No hay problema amigo! ¿Me puedes dar un voto positivo? :)
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