User Tag List

Resultados 1 al 5 de 5

Tema: Extraer campos de un CAP-XML

  1. #1
    Car Park Chaos Champion!
    Fecha de ingreso
    Jan 2006
    Mensajes
    7,311
    Mencionado
    18 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    111
    Agradecer Thanks Received 
    63
    Thanked in
    Agradecido 42 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    55

    Extraer campos de un CAP-XML

    De nuevo me paso por aquí a solicitar una ayuda "programática".

    Estoy recibiendo datos en formato CAP, que está basado en XML, y necesito extraer dos campos, y algo se me escapa o no lo veo muy claro.

    Las dos herramientas que he encontrado en Python (minidom y etree) no me devuelven los campos solicitados, me imagino que al no ser un XML estándar no hay manera de que encuentre los campos.

    ¿Alguna idea de como seleccionar esos campos? Me vale casi cualquier cosa, es un flujo continuo de datos, en el que tengo que ir extrayendo esos dos datos constantemente.

    Un ejemplo de lo que recibo:
    Spoiler: Ver
    Código:
    <?xml version="1.0" encoding="UTF-8"?> <cap:alert xmlns:cap="urn:oasis:names:tc:emergency:cap:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:emergency:cap:1.2 CAP-v1.2-os.xsd "> <cap:identifier>Libelium_2015-07-01T16:38:46+:00:002</cap:identifier> <cap:sender>Libelium_Enviroment_400588116</cap:sender> <cap:sent>2015-07-01T16:38:46+:00:00</cap:sent> <cap:status>Actual</cap:status> <cap:msgType>Alert</cap:msgType> <cap:scope>Public</cap:scope> <cap:code>KPI</cap:code> <cap:info> <cap:category>Other</cap:category> <cap:event>Libelium</cap:event> <cap:urgency>Inmediate</cap:urgency> <cap:severity>Unknown</cap:severity> <cap:certainty>Observed</cap:certainty> <cap:onset>2015-07-01T16:38:46+:00:00</cap:onset> <cap:senderName>Libelium</cap:senderName> <cap:headline>Waspmote sensors</cap:headline> <cap:description>Sensor data from Waspmote devices: STR</cap:description> <cap:parameter> <cap:valueName>STR</cap:valueName> <cap:value>1.79</cap:value> </cap:parameter> </cap:info> </cap:alert>
    <?xml version="1.0" encoding="UTF-8"?> <cap:alert xmlns:cap="urn:oasis:names:tc:emergency:cap:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:emergency:cap:1.2 CAP-v1.2-os.xsd "> <cap:identifier>Libelium_2015-07-01T16:38:42+:00:004</cap:identifier> <cap:sender>Libelium_Enviroment_400588116</cap:sender> <cap:sent>2015-07-01T16:38:42+:00:00</cap:sent> <cap:status>Actual</cap:status> <cap:msgType>Alert</cap:msgType> <cap:scope>Public</cap:scope> <cap:code>KPI</cap:code> <cap:info> <cap:category>Other</cap:category> <cap:event>Libelium</cap:event> <cap:urgency>Inmediate</cap:urgency> <cap:severity>Unknown</cap:severity> <cap:certainty>Observed</cap:certainty> <cap:onset>2015-07-01T16:38:42+:00:00</cap:onset> <cap:senderName>Libelium</cap:senderName> <cap:headline>Waspmote sensors</cap:headline> <cap:description>Sensor data from Waspmote devices: STR</cap:description> <cap:parameter> <cap:valueName>STR</cap:valueName> <cap:value>1.80</cap:value> </cap:parameter> </cap:info> </cap:alert>
    <?xml version="1.0" encoding="UTF-8"?> <cap:alert xmlns:cap="urn:oasis:names:tc:emergency:cap:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:emergency:cap:1.2 CAP-v1.2-os.xsd "> <cap:identifier>Libelium_2015-07-01T16:38:38+:00:006</cap:identifier> <cap:sender>Libelium_Enviroment_400588116</cap:sender> <cap:sent>2015-07-01T16:38:38+:00:00</cap:sent> <cap:status>Actual</cap:status> <cap:msgType>Alert</cap:msgType> <cap:scope>Public</cap:scope> <cap:code>KPI</cap:code> <cap:info> <cap:category>Other</cap:category> <cap:event>Libelium</cap:event> <cap:urgency>Inmediate</cap:urgency> <cap:severity>Unknown</cap:severity> <cap:certainty>Observed</cap:certainty> <cap:onset>2015-07-01T16:38:38+:00:00</cap:onset> <cap:senderName>Libelium</cap:senderName> <cap:headline>Waspmote sensors</cap:headline> <cap:description>Sensor data from Waspmote devices: STR</cap:description> <cap:parameter> <cap:valueName>STR</cap:valueName> <cap:value>1.80</cap:value> </cap:parameter> </cap:info> </cap:alert>


    Perdón por el formato que coge el foro, yo quiero recuperar el valueName y value.


    Un saludo!!

  2. #2

    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
    Cada linea debe parsearse como un xml autónomo, ya que la raiz del documento es el nodo alert. Tal vez no ves el valor que hay en los nodos valueName y value porque lo que hay que consultar es el nodo de tipo texto que hay dentro de ellos, para eso hay que ejecutar, una vez cargado el documento:

    valueNode = dom.getElementsByTagName('value');
    print valueNode[0].firstChild.nodeValue;
    Buy this car to drive to work. Drive to work to pay for this car.

  3. #3

    Fecha de ingreso
    Jun 2004
    Ubicación
    en babia
    Mensajes
    2,522
    Mencionado
    31 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    248
    Agradecer Thanks Received 
    412
    Thanked in
    Agradecido 233 veces en [ARG:2 UNDEFINED] posts
    ¿Tiene que ser automatizado? ¿O son datos que procesas tu luego a mano?
    Lo digo porque con Notepad++ y 4 clicks de ratón podrias sacar lo que te interesase.

    Saludos

  4. #4

    Fecha de ingreso
    Aug 2003
    Mensajes
    681
    Mencionado
    5 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    12
    Agradecer Thanks Received 
    92
    Thanked in
    Agradecido 55 veces en [ARG:2 UNDEFINED] posts
    Lo que tienes es un xml con un namespace que define dicho xml, es decir, es un XML como dios manda (como deberían hacerse :P) estándar que te cagas. Probablemente así sin indagar mucho lo que pasa es que tienes que pasar el schema que se declara en cap:alert, y sin eso, no es capaz de localizar nada. Otra cosa es que digas: "oye, que el schema ese me la suda..." pues deberías mirar si esas librerías permiten parsear desactivando namespaces, en ese caso: hazlo.

  5. #5
    Car Park Chaos Champion!
    Fecha de ingreso
    Jan 2006
    Mensajes
    7,311
    Mencionado
    18 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    111
    Agradecer Thanks Received 
    63
    Thanked in
    Agradecido 42 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    55
    Ni si quiera sería necesario usar DOM, necesito pillar esos datos, coger esos campos y enchufarlos a otro programa.

    El esquema es el siguiente:

    El flujo de datos es continuo, todo el rato se están enviando CAP-XML con la estructura anterior.

    programaA > programaB > programaC

    El programaB, podría ser perfectamente un script, A y C ya son funcionales de manera independiente, pero estoy muy cabezçon, y no encuentro la manera mas sencilla de enfoncar el problema para coger esos datos de manera sencilla.

    programaA es en este caso un cliente MQTT que está publicando datos.

    programaB o scriptB puede ser prácticamente cualquier cosa.

    programaC es un programilla en C# para enviar datos a una plataforma de una manera especifica.

    Todas las ideas son bien recibidas.

    Un saludo de antebrazo.

Permisos de publicación

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