我用JSDOM加载了一个html文件。 .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语句中的键和值。首先,我检查键是否为str的一部分。这可行。但是我认为,如果if陈述的第二部分是错误的。我还尝试了与比较键和值 foreach($ filtered-> find('a,b')as $ 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文档吗?
提前谢谢!
答案 0 :(得分:0)
这是我通过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)
})