Node.js burattinaio – Recupero di contenuti da un file txt complesso

Come posso scaricare, accedere ed elaborare un file txt complesso in burattinaio?

Posso accedere a un file xml ( Node.js burattinaio – Download / Accesso a un file xml ed elaborare il contenuto ) in questo modo:

await page.goto(myPage, {waitUntil: 'load'}); const newPage = await page.evaluate(() => { var columns = document.getElementsByTagName("VALUEA"); var values = {"values":[]}; for(let f in columns){ values.values.push(columns[f].innerText); } return JSON.stringify(values); }); console.log(JSON.parse(newPage)) 

Che mi restituisce i valori desiderati. Ma se voglio accedere a un file txt simile a questo … e per test voglio recuperare tutti i ‘VALUEA’ ottengo:

 {"values":[null,null,null]} 

Questo è il file TXT che sto guardando:

 117.txt : 20180824 117.hdr.sgml : 20180824 20180824153107 VALUE01: 117 VALUE02: ABC COMPANY: COMPANY DATA: VALUE03: Some Company VALUE04: 777 BUSINESS ADDRESS: VALUE05: Some street VALUE06: Some city   ABC 1 primary_doc.xml      ABC    777 XXXXXXXX   06-30-2018     06-30-2018 1  STRAWBERRIES   Corp 
MOUNTAIN STREET NEW YORK
N INFORMATION TABLE 2 xml_xyz.xml Company A INC 123 AB Company B LTD 567 ST ...

Alla fine voglio ottenere tutto VALUE (in primis VALUEA, VALUEB, VALUEC, VALUEC)! Come si fa?

Puoi utilizzare la seguente soluzione per ottenere il contenuto di testo da VALUEA , VALUEB , VALUEC e VALUEC :

 const example = await page.evaluate( () => { const page = document.createElement( 'html' ); const page_content = document.body.textContent; page.innerHTML = page_content; return { 'VALUEA' : Array.from( page.getElementsByTagName( 'VALUEA' ), e => e.textContent ), 'VALUEB' : Array.from( page.getElementsByTagName( 'VALUEB' ), e => e.textContent ), 'VALUEC' : Array.from( page.getElementsByTagName( 'VALUEC' ), e => e.textContent ), 'VALUED' : Array.from( page.getElementsByTagName( 'VALUED' ), e => e.textContent ) }; }); console.log( example.VALUEA[0] ); // Company A console.log( example.VALUEA[1] ); // Company B console.log( example.VALUEB[0] ); // INC console.log( example.VALUEB[1] ); // LTD console.log( example.VALUEC[0] ); // 123 console.log( example.VALUEC[1] ); // 567 console.log( example.VALUED[0] ); // AB console.log( example.VALUED[1] ); // ST 

Per leggere come dom elementi html / xml all’interno di txt, una ansible soluzione sta creando un dummy dom node, come questo:

 var el = document.createElement( 'html' ); el.innerHTML = "content"; var columns = el.getElementsByTagName("tagelement"); 

Quindi nel tuo esempio:

 const puppeteer = require('puppeteer'); 

(async () => {const browser = attendi puppeteer.launch ({headless: false}); const page = Attendi browser.newPage (); aspetta page.goto (‘ http://example.com/file.txt ‘ , {waitUntil: ‘load’});

 const newPage = await page.evaluate(() => { var el = document.createElement( 'html' ); el.innerHTML = document.getElementsByTagName("pre")[0].innerText; var allValues = el.querySelectorAll("VALUEA, VALUEB, VALUEC, VALUED"); var values = {}; for(let i = 0; i 

}) ();