如何使用多个条件指定 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)
})
我用 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)
})