如何使用多个条件指定 JSDOM fromFile

How to specify JSDOM fromFile with multiple conditions

我用 JSDOM 加载了一个 html 文件。 .fomFile 函数工作正常。 现在我想遍历整个 html 文档以找到具有特定键和值的 table。如果值包含键,我将存储结果。 我的问题是,我不知道如何以这种方式排列键和值数组,以便我可以比较它们。

这是我的代码:

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 语句中比较键和值。首先,我检查键是否是 str 的一部分。这行得通。但是我认为这个 if 语句的第二部分是错误的。我还尝试将键和值与 foreach( $filtered->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文档?

提前致谢!

这就是我通过 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)
})