es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Parsear XML a INT para sumar los números

Tengo un XML del cual intento obtener una suma. El número puede ser 0 o 1, y quiero obtener la suma de todos los números. El XML se ve así:

<alerts>
    <alert1>0</alert1>
    <alert2>1</alert2>
    <alert3>1</alert3>
    <alert4>0</alert4>
</alerts>

Mi código actual (incorrecto) se ve así:

xpath = require('xpath');
xmldom = require('xmldom');

doc = new xmldom.DOMParser().parseFromString("sourceXml");

var count = xpath.select("alerts/alert1", doc).toString();
count += xpath.select("alerts/alert2", doc).toString();
count += xpath.select("alerts/alert3", doc).toString();
count += xpath.select("alerts/alert4", doc).toString();

var result = count;

Obviamente, debido a que son cadenas de caracteres, el resultado es “0110” en lugar de “2” como un número entero. Intenté envolver cada resultado en parseInt, pero eso solo devuelve NaN. Agradecería cualquier ayuda.

Editar:

parseInt(xpath.select("alerts/alert3", doc).toString());
parseInt(xpath.select("alerts/alert3", doc));

Intenté ambos, pero no tengo mucha experiencia con JavaScript, por lo que podría ser un problema de sintaxis.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para obtener la suma de todos los números en el XML, puedes probar el siguiente código:

    xpath = require('xpath');
    xmldom = require('xmldom');
    
    doc = new xmldom.DOMParser().parseFromString("sourceXml");
    
    var nodes = xpath.select("//alerts/*", doc); // seleccionar todos los nodos dentro del elemento 'alerts'
    
    var sum = 0;
    for(var i = 0; i < nodes.length; i++) {
        sum += parseInt(nodes[i].textContent); // convertir el contenido de texto del nodo a entero y agregarlo a la variable 'sum'
    }
    
    var result = sum;
    

    Este código selecciona todos los nodos dentro del elemento ‘alerts’ utilizando la expresión de XPath “//alerts/*”. Luego itera sobre cada nodo, convierte su contenido de texto a un entero y lo añade a la variable ‘sum’. Finalmente, la variable ‘sum’ se asigna a ‘result’.

Comments are closed.