使用node.js中的XPathparsingHTML / XML

我试图编写一个XPath语句来获取表中的每一行的内容,但只有当每行的第二列未设置为“TBA”。 我正在closures这个页面的页面 。 我是使用XPath的新手。

我提出了以下的声明,我已经用一个在线的XPathtesting器成功地testing了(或者看起来成功了),但是一直无法弄清楚如何在node.js中应用它:

//*[@id="body_column_left"]/div[4]/table/tbody/tr/[not(contains(./td[2], 'TBA'))]

这是我的尝试下面,我已经尝试了变化,但我不能得到它甚至validation为有效的XPath语句,结果我已经在不是非常有用的堆栈跟踪丢失:

 var fs = require('fs'); var xpath = require('xpath'); var parse5 = require('parse5'); var xmlser = require('xmlserializer'); var dom = require('xmldom').DOMParser; var request = require('request'); var getHTML = function (url, callback) { request(url, function (error, response, body) { if (!error && response.statusCode == 200) { return callback(body) // return the HTML } }) } getHTML("http://au.cybergamer.com/pc/csgo/ladder/scheduled/", function (html) { var parser = new parse5.Parser(); var document = parser.parse(html.toString()); var xhtml = xmlser.serializeToString(document); var doc = new dom().parseFromString(xhtml); var select = xpath.useNamespaces({"x": "http://www.w3.org/1999/xhtml"}); var nodes = select("//x:*[@id=\"body_column_left\"]/div[4]/table/tbody/tr/[not(contains(./td[2], 'TBA'))]", doc); console.log(nodes); }); 

任何帮助,将不胜感激!

我结束了解决这个问题使用cheerio而不是xpath

见下文:

  var $ = cheerio.load(html); $('.s_grad br').replaceWith("\n"); $('.s_grad thead').remove(); $('.s_grad tr').each(function(i, elem) { rows[i] = $(this).text(); rows[i] = rows[i].replace(/^\s*[\r\n]/gm, ""); // remove empty newlines matches.push(new match($(this).find('a').attr('href').substring(7).slice(0, -1))) // create matches });