Как указать JSDOM из файла с несколькими условиями - PullRequest
0 голосов
/ 29 января 2019

Я загружаю HTML-файл с помощью JSDOM.Функция .fomFile работает нормально.Теперь я хочу перебрать весь HTML-документ, чтобы найти таблицу с конкретными ключами и значениями.Если значения содержатся в ключе, я буду хранить результаты.Моя проблема в том, что я не знаю, как я могу расположить ключ и массив значений таким образом, чтобы я мог сравнить их.

Вот мой код:

const jsdom = require("jsdom");
const { JSDOM } = jsdom;

const strs = [];
const obj = {};
JSDOM.fromFile("../file").then(dom 
=> {dom.window.document.querySelectorAll('b, td').forEach(str => {
    strs.push(str.textContent)
});
keys = ['Window-Wall Ratio']
values = ['Gross Wall Area [m2]'] 
strs.forEach((str, i) => {
  if (keys.includes(str) && 'Window-Wall Ratio' in values === true ) {
      console.log(str)
    obj[str] = [strs[i+1],...];
  }
})
console.log(obj)});

Я пытаюсь сравнить ключи и значения в операторе if.Сначала проверяю, являются ли ключи частью ул.Это работает.Но вторая часть этого, если утверждение неверно, я думаю.Я также попытался сравнить ключи и значения с foreach ($ Filter-> Find ('a, b') как $ element) {...}.Но это также не работает.

Вот (часть) моего html, который описывает структуру файла:

    <b>Window-Wall Ratio</b><br><br>
    <table border="1" cellpadding="4" cellspacing="0">
      <tr>
        <td align="right">Gross Wall Area [m2]</td>
        <td align="right">      973.83</td>
        <td align="right">      179.25</td>
     </tr>
    </b>

Может ли кто-нибудь помочь мне выяснить, какпроверить html документ с несколькими условиями?

Заранее спасибо!

1 Ответ

0 голосов
/ 05 марта 2019

Вот как я решил итерацию через HTML-документ:

const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const strs = [];
const obj = {};

keys = ['End Uses',..,]
values = ['Heating', ...,]

const params = {
    'End Uses' : ['test'],       
}

//load file and pares the the html table
JSDOM.fromFile("../upload/file.html").then(dom => {
dom.window.document.querySelectorAll('b, table').forEach(str => {
    strs.push(str.textContent)
});

strs.forEach( (tag, i) => {
    if (keys.includes(tag)) {
        let table = strs[i + 1];
        let rows = table.split("\n").filter(line => line.replace(/\s/g, '').length);
        let props = {};
        rows.forEach( (row, i) => {
            values.forEach( v => {
                if (row.includes(v)) {
                    let total = [];
                    let counter = 1;
                    while (true) {
                        let value = parseFloat(rows[i + counter]);
                        if (isNaN(value)) {
                            break;
                        } else {
                            total.push({name: params[tag][counter - 1], value: value});
                            counter += 1
                        }

                    }
                    if (total.length) {
                        props[v] = total; 
                    }
                }
            })       
        })
        //store the json document localy
        obj[tag] = props;
        var json = JSON.stringify(obj)
        var fs = require('fs');
        fs.writeFile('../upload/modelOutput.json', json, 'utf8');
    }
})

console.log(obj)
}) 
...