试图在node.js中编写一个函数,该函数将通过xpath获取元素。
我有一个所需的dom元素的xpath,如
xpath = '/html/body/div/div[2]/div/h1/span'
我的DOM是通过fs模块在cheerio中加载的(因为我在本地存储了这个网页):
var file = fs.readFileSync( "aaa.html" )
var inDom = cheerio.load( file )
然后,我尝试通过每个xpath部分迭代,获取dom树的元素,检查它的子元素名称和元素号是否匹配,如果它们匹配,则将rez存储为这个mathed元素。然后,我继续使用新的xpath部分进行挖掘。代码看起来是这样的,但是它没有得到我想要的,因为就在我得到第一个mach并将rez设置为匹配的元素之后,在下一个for循环中,这个新元素似乎没有任何子元素。
var rez = inDom('html');
var xpath = inXpath.split( "/" );
for( var i = iterateStart; i < xpath.length; i++ ) {
var selector = xpath[ i ].split('[')[0];
var matches = xpath[ i ].match(/\[(.*?)\]/);
var child = 0;
if( matches ) {
child = matches[ 1 ];
}
for( var k = 0; k < rez.length; k++ ) {
var found = false
var curE = rez[ k ]
for( var p = 0; p < curE.children.length; p++ ) {
var curE_child = curE.children[ p ]
if( curE_child.name = selector ) {
if( child > 0 ) {
child--
}
else {
rez = curE_child
found = true
break
}
}
}
if( found ) {
break
}
}
}
有人能帮助我使用上面提到的node.js模块编写代码吗?
发布于 2013-04-15 04:47:57
似乎您正在做更多的工作,而不是需要找到所需的元素。你能张贴一个示例html页面吗?
Cheerio为查找您应该使用的元素提供了更高级别的api。
var html = fs.readFileSync('aaa.html')
var $ = cheerio.load(html)
var selector = 'div' // some selector here which I can tune to the example html page
var parent = $(selector)
var childSelector = 'p' // some other selector
var children = parent.find(childSelector)
发布于 2014-12-03 08:58:45
是的,有xpath实现:
npm install xpath
示例:
var xml = "<book><title>Harry Potter</title></book>"
var doc = new dom().parseFromString(xml)
var title = xpath.select("//title/text()", doc).toString()
console.log(title)
https://stackoverflow.com/questions/16010551
复制