Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

131
Views
Problema al leer un archivo XML grande en Javascript

Creé un sitio web donde puedes importar un archivo XML y luego leerlo. Funciona perfectamente bien para la mayoría de los archivos, pero intenté usar un archivo XML con 730 MB y ya no funciona. Parece que no recibo ningún error en la consola, pero si, por ejemplo, uso este código,

 numberOfReports = xmlDoc.getElementsByTagName("DailyReport").length;

Siempre obtengo 0 aunque debería ser mucho más que eso, ya que los archivos XML definitivamente contienen múltiples elementos <DailyReport> . Mi función para importar y analizar los archivos se ve así:

 // Function to import and serialize the XML file function import_XML() { var input = document.createElement('input'); input.type = 'file'; input.onchange = e => { // getting a hold of the file reference file = e.target.files[0]; // setting up the reader var reader = new FileReader(); reader.readAsText(file, 'UTF-8'); // Tell the reader what to do when it's done reading reader.onload = readerEvent => { content = readerEvent.target.result; const parser = new DOMParser(); xmlDoc = parser.parseFromString(content, "application/xml"); console.log(xmlDoc.documentElement.nodeName == "parsererror" ? "Error while parsing XML File" : xmlDoc.documentElement.nodeName); console.log("content: " + content); // Number of reports in the XML file numberOfReports = xmlDoc.getElementsByTagName("DailyReport").length; console.log("number of daily reports: " + numberOfReports); updateTable(); } } input.click(); }

El contenido que obtengo de content = readerEvent.target.result; en la consola también está vacío:

captura de pantalla de la consola

No estoy seguro si es porque el archivo es demasiado grande, pero el archivo XML no debería tener ninguna malformación. ¿Hay alguien que me puede ayudar con este problema? ¡Realmente agradecería cualquier ayuda!

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Sospecho que está excediendo la longitud máxima de cadena del motor JavaScript de su navegador. Diferentes motores tienen diferentes límites. MDN dice que el límite de Firefox es de aproximadamente 1 GB (aunque acabo de probar un experimento y era más como 800 MB). Un experimento rápido en Brave (similar a Chrome) sugiere un máximo de aproximadamente 512 MB:

 let size = 0; const chunk = "".padStart(4096, " "); const max = 800 * 1024 * 1024; try { let str = ""; while (str.length < max) { size = str.length; str += chunk; } console.log(`worked! size = ${size / 1024 / 1024}`); } catch { console.log(`ERROR, size = ${size / 1024 / 1024}`); }

El mismo experimento en Node.js (que usa el mismo motor de JavaScript que los navegadores basados en Chromium, V8) arroja el mismo resultado, lo que sugiere que es el límite en V8.

Desafortunadamente, DOMParser solo acepta cadenas, no (digamos) blobs. Creo que probablemente no podrá manejar archivos tan grandes en navegadores basados en V8.

Sospecho que DOMParser obtendrá un método que le permita leer transmisiones algún día, pero eso no te ayuda ahora. La única solución que se me ocurre es encontrar un analizador XML escrito en JavaScript que admita transmisiones o que pueda adaptar para usar una transmisión. Hay varios analizadores XML en los paquetes npm , puede haber uno que pueda usar un blob o un ReadableStream , o uno que admita flujos de Node.js que podría adaptar para trabajar con ReadableStream (y la versión del navegador de los documentos XML en lugar de lo que sea). está usando en Node.js).

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!