User Tag List

Resultados 1 al 8 de 8

Tema: Combinar XMLs desde linux?

  1. #1

    Fecha de ingreso
    Sep 2005
    Ubicación
    Madri
    Mensajes
    438
    Mencionado
    1 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    13
    Agradecer Thanks Received 
    13
    Thanked in
    Agradecido 6 veces en [ARG:2 UNDEFINED] posts

    Combinar XMLs desde linux?

    Buenas,
    Siempre acabo por aqui cuando acabo mas perdido que un pulpo en un garaje... a veces siento ser tan brasillas ;-)

    El caso es que necesito unir en un unico XML el contenido de bastantes XML que están contenidos a su vez en diferentes carpetas. En principio un script bash me soluciona parte del problema y tengo algo de idea.
    El problema es que de manejo de XML tengo bastante menos idea y estoy seguro de que hay alguna herramienta que me puede simplificar la vida (para no hacerlo todo con puro bash).

    La estructura del XML final será igual que la de los XML que tengo que combinar. Los cambios serian: añadir los registros de cada XML y formar una cabecera (etiquetas) que corresponda con los nuevos datos (la suma de todos los XML combinados).

    Me podéis iluminar un poquito y decidme por donde buscar? Que herramientas puedo usar y si podria hacerlo desde linea de comandos?

    Mil gracias, como siempre.

  2. #2

    Fecha de ingreso
    May 2008
    Ubicación
    A tu lado, en tus sueños
    Mensajes
    22,309
    Mencionado
    145 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    319
    Agradecer Thanks Received 
    552
    Thanked in
    Agradecido 424 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    3
    No se , has probado las librerias Tiny XML ?

    http://sourceforge.net/projects/tinyxml/

  3. #3

    Fecha de ingreso
    Jul 2006
    Ubicación
    Madriz
    Mensajes
    1,297
    Mencionado
    28 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    176
    Agradecer Thanks Received 
    322
    Thanked in
    Agradecido 172 veces en [ARG:2 UNDEFINED] posts
    Hasta donde sé, no hay "herramientas" para hacerlo, tendrías que programar tú algo usando alguna librería de xml (como la que dice gamemaster)...
    Siempre que he tenido que hacer algo asi, he tirado de python, que para mi es lo más rápido a la hora de programar, y ahí tienes la librerías como ElementTree que te permitirían hacer lo que quieres de manera sencilla...
    Mi consejo es que cojas el lenguaje de programación que mejor se te de y que tenga manejo de xmls de manera sencilla y te hagas un pequeño script para lo que necesitas

  4. #4

    Fecha de ingreso
    Mar 2007
    Ubicación
    Barna
    Mensajes
    10,357
    Mencionado
    93 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    374
    Agradecer Thanks Received 
    1,801
    Thanked in
    Agradecido 951 veces en [ARG:2 UNDEFINED] posts
    xslt/xpath es la tecnología y xmlstarlet el comando. O xsltproc si puedes hacerlo todo con xslt.

    Ahora, xslt es algo muy complejo de escribir y xmlstarlet hace muchísimas cosas además de lo que quieres. Si lo único que quieres es concatenacioens simples de archivos xml, entonces a lo mejor prefieres hacerte tú mismo el editor en cualquier lenguaje de script. En Python es relativamente sencillo.
    Última edición por juanvvc; 12/04/2012 a las 12:49

  5. #5

    Fecha de ingreso
    Apr 2007
    Ubicación
    Rostovillar
    Mensajes
    3,783
    Mencionado
    11 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    1,016
    Agradecer Thanks Received 
    407
    Thanked in
    Agradecido 256 veces en [ARG:2 UNDEFINED] posts
    Si tienen todos la misma estructura y lo que quieres es concatenar un conjunto de nodos que se repiten en los diferentes ficheros, ¿no te vladría con cortar el número de lineas que ocupan los nodos de la "cabecera" y los del "pie" con head y tail de *nix y concatenar el resultado? al final le pones al principio del fichero resultante las lineas de la cabecera y del pie de cualquier fichero original y te vale.

    algo asi:
    Fichero1:
    <cabecera>
    </contenido1>
    </contenido2>
    </cabecera>

    Fichero2:
    <cabecera>
    </contenido3>
    </cabecera>

    Fichero temporal:
    </contenido1>
    </contenido2>
    </contenido3>

    Fichero final:
    <cabecera>
    </contenido1>
    </contenido2>
    </contenido3>
    </cabecera>

    Pero para eso todos los ficheros tienen que estar formados de la misma manera (con los nodos de la cabecera/pie ocupando el mismo número de lineas).

    BIBAN LAS ÑAPAS RÁPIDAS HOYGA
    Buy this car to drive to work. Drive to work to pay for this car.

  6. #6

    Fecha de ingreso
    Sep 2005
    Ubicación
    Madri
    Mensajes
    438
    Mencionado
    1 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    13
    Agradecer Thanks Received 
    13
    Thanked in
    Agradecido 6 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Nathrezim Ver mensaje
    Si tienen todos la misma estructura y lo que quieres es concatenar un conjunto de nodos que se repiten en los diferentes ficheros, ¿no te vladría con cortar el número de lineas que ocupan los nodos de la "cabecera" y los del "pie" con head y tail de *nix y concatenar el resultado? al final le pones al principio del fichero resultante las lineas de la cabecera y del pie de cualquier fichero original y te vale.

    algo asi:
    Fichero1:
    <cabecera>
    </contenido1>
    </contenido2>
    </cabecera>

    Fichero2:
    <cabecera>
    </contenido3>
    </cabecera>

    Fichero temporal:
    </contenido1>
    </contenido2>
    </contenido3>

    Fichero final:
    <cabecera>
    </contenido1>
    </contenido2>
    </contenido3>
    </cabecera>

    Pero para eso todos los ficheros tienen que estar formados de la misma manera (con los nodos de la cabecera/pie ocupando el mismo número de lineas).

    BIBAN LAS ÑAPAS RÁPIDAS HOYGA
    Me mola! No queria liarme la manta a la cabeza con bash pero esta solucion es bastante sencilla.
    Voy a darle caña y te cuento.
    Gracias a todos

  7. #7

    Fecha de ingreso
    Mar 2007
    Ubicación
    Barna
    Mensajes
    10,357
    Mencionado
    93 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    374
    Agradecer Thanks Received 
    1,801
    Thanked in
    Agradecido 951 veces en [ARG:2 UNDEFINED] posts
    La solución de Nathrezim, si funciona, es para quitarse el sombrero

    Si cabeceras y pies no ocupan lo mismo porque no están formateados para que los lean los humanos, quizá te sirva ejecutar un "xmlstarlet format" antes. Es decir, un archivo así:

    <content><element>1</element></content>

    Si haces "xmlstarlet format file.xml" se imprime así:

    <?xml version="1.0"?>
    <content>
    <element>1</element>
    </content>

    Y entonces ya puedes aplicar la solución de Nathrezim

  8. #8

    Fecha de ingreso
    Sep 2005
    Ubicación
    Madri
    Mensajes
    438
    Mencionado
    1 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    13
    Agradecer Thanks Received 
    13
    Thanked in
    Agradecido 6 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por juanvvc Ver mensaje
    La solución de Nathrezim, si funciona, es para quitarse el sombrero

    Si cabeceras y pies no ocupan lo mismo porque no están formateados para que los lean los humanos, quizá te sirva ejecutar un "xmlstarlet format" antes. Es decir, un archivo así:

    <content><element>1</element></content>

    Si haces "xmlstarlet format file.xml" se imprime así:

    <?xml version="1.0"?>
    <content>
    <element>1</element>
    </content>

    Y entonces ya puedes aplicar la solución de Nathrezim
    Con esta ayuda cualquiera lo consigue, muchas gracias.
    A ver si me pongo, que estoy teniendo problemas con la conexion ssh y no puedo probar.

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •