Foros del Web » Programación para mayores de 30 ;) » .NET »

copiar un xml a otro trasformandolo en el camino

Estas en el tema de copiar un xml a otro trasformandolo en el camino en el foro de .NET en Foros del Web. Buenas, estoy intentando hacer un ejercicio en .net con un xml que he de leer de disco y guardarlo en otro xml transformándolo un poco. ...
  #1 (permalink)  
Antiguo 11/11/2009, 08:06
 
Fecha de Ingreso: noviembre-2009
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 0
copiar un xml a otro trasformandolo en el camino

Buenas, estoy intentando hacer un ejercicio en .net con un xml que he de leer de disco y guardarlo en otro xml transformándolo un poco.
El xml origen tiene 2 tipos de nodos, si me encuentro en el primer caso tengo que quitar la información que "me sobra" y en el otro caso he de copiarlo sin más.
Como no se si me he explicado aquí va el ejemplo de xml origen
Código:
<?xml version="1.0" encoding="iso-8859-1"?>

<ejemplo>
  <contenedor id="1">
    <tratar>
      <caso nombre="p1">
        <hacer id="unir">
          <nombre>caja</nombre>
          <valores>
            <valor>1</valor>
          </valores>
        </hacer>
      </caso>
    </tratar>
  </contenedor>
  <contenedor id="2">
    <hacer nombre="suma" id="a">
      <valor>1</valor>
      <valor>2</valor>
    </hacer>
  </contenedor>
</ejemplo>
Y aquí el xml final.

Código:
<?xml version="1.0" encoding="iso-8859-1"?>
<ejemplo>
  <contenedor id="1">
    <caso nombre="p1">
      <valor>1</valor>
    </caso>
  </contenedor>
  <contenedor id="2">
    <hacer nombre="suma" id="a">
      <valor>1</valor>
      <valor>2</valor>
    </hacer>
  </contenedor>
</ejemplo>
Estoy probando a leer el xml con un XPathNavigator y un XPathNodeIterator, pero me temo que estoy estancado.
¿Alguna sugerencia?
Se me olvidaba, estoy programando con c#
Gracias.

Última edición por richital; 11/11/2009 a las 08:46
  #2 (permalink)  
Antiguo 11/11/2009, 11:38
Avatar de eledgarr  
Fecha de Ingreso: octubre-2008
Ubicación: La ciudad de la esperanza
Mensajes: 133
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: copiar un xml a otro trasformandolo en el camino

Te dejo estos link

http://www.elguille.info/colabora/NE...ue_ASPyXML.htm
http://www.subgurim.net/Articulos/xm...heros-xml.aspx
http://adevdays.wordpress.com/2007/1...e-net-parte-1/
__________________
Si te sirve lo que te escribo regalame un karma positivo
-----------------------------------------------------------------------
Estoy aqui no por que conozco mucho, estoy para ignorar menos
  #3 (permalink)  
Antiguo 12/11/2009, 01:42
 
Fecha de Ingreso: noviembre-2009
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: copiar un xml a otro trasformandolo en el camino

Muchas gracias por responder, pero no es exactamente lo que necesito.
El XmlTextReader (si no lo he entendido mal) va bien para leer el archivo rápidamente pero no para ir modificandolo.
Yo lo que tenía pensado es ir leyendo nodos con el XPathNodeIterator y tratarlos o no dependiendo del tipo al que pertenezcan. Lo cual no se si será posible....
  #4 (permalink)  
Antiguo 12/11/2009, 01:50
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: copiar un xml a otro trasformandolo en el camino

Profundiza en las XSLTs (o transformaciones xsl), que es lo que se usa para lo que quieres hacer.

http://www.csharpfriends.com/Article...x?articleID=63
  #5 (permalink)  
Antiguo 25/11/2009, 03:34
 
Fecha de Ingreso: noviembre-2009
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: copiar un xml a otro trasformandolo en el camino

se que he tardado en responder, pero he estado fuera.
al final lo he solucionado con algo así:
Código:
XPathNavigator nav = node.CreateNavigator();
XPathNodeIterator nodesIt = nav.SelectChildren(XPathNodeType.Element);
while (nodesIt.MoveNext())
{
   IHasXmlNode nodes = nodesIt.Current as IHasXmlNode;
   tratar(nodes.GetNode());
 }
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:56.