【发布时间】:2017-04-20 07:06:21
【问题描述】:
fs.readFile(htmlPath, 'utf8', function(err, html) {
var htmlparser = require("htmlparser2");
var primary, secondary;
var handler = new htmlparser.DomHandler(function(error, dom) {
for (var i = 0; i < dom.length; i++) {
if (((dom[i].attribs !== undefined) ? dom[i].attribs.class === 'offer-wrapper' : false) && (dom[i].children[1] !== undefined ? dom[i].children[1].children[1] !== undefined : false)) {
if (dom[i].children[1].children[1] !== undefined ? (dom[i].children[1].children[1].name !== undefined ? (dom[i].children[1].children[1].name === 'p' && dom[i].children[1].children[1].children[0] !== undefined ? dom[i].children[1].children[1].children[0].data !== undefined : false) : false) : false) {
primary = dom[i].children[1].children[1].children[0].data.trim();
}
}
if ((dom[i].attribs !== undefined ? dom[i].attribs.class === 'promo-banner' : false) && (dom[i].children[1] !== undefined ? ((dom[i].children[1].name !== undefined && dom[i].children[1].children[0] !== undefined) ? (dom[i].children[1].name === 'p' && dom[i].children[1].children[0].data !== undefined) : false) : false)) {
secondary = dom[i].children[1].children[0].data.trim();
}
}
});
var parser = new htmlparser.Parser(handler);
parser.write(html);
parser.end();
});
HTML 文件格式为 Format 1
<div class=offer-wrapper>
<div class=offer>
<p>Content1</p>
</div>
</div>
<div class=promo-banner>
<p>Content 2</p>
</div>
或 格式 2
<div class=promo-banner>
<p>Content 2</p>
</div>
或 格式 3
<div class=offer-wrapper>
<div class=offer>
<p>Content1</p>
</div>
</div>
<div class=promo-banner>
</div>
当我尝试读取 HTML 文件内容时,我只能读取格式 2 和格式 3 的内容,而不能读取格式 1 的内容
有人可以帮帮我吗?
【问题讨论】:
-
哇,你能展开嵌套的三元运算符吗?这是完全不可读的代码,请使用常规的
if/else。 -
此外,还有一个名为 Cheerio 的 HTML 解析器,它是 htmlparser2 的包装器,它还支持用于选择特定节点的类 jQuery 语法。你会发现比使用 htmlparser2 的基本 DOM 方法更容易处理。
标签: javascript node.js html-parsing