試圖在node.js中編寫一個函數,該函數將通過xpath獲取元素。使用xpath和cheerio獲取元素
我具有所需的DOM元素的像
xpath = '/html/body/div/div[2]/div/h1/span'
我的DOM裝入cheerio的XPath通過fs的模塊(因爲我此網頁存儲在本地):
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模塊的代碼?
我沒有實現你的方法,我被困在獲取時,例如,第三個元素,當xpath的部分就像'../ div [3]/...'。我使用這裏粘貼的代碼http://pastebin.com/pzSYz6Zc錯誤也被粘貼。 – Astro
沒有任何示例html很難給你提供建議。請發佈示例html頁面 – Noah
沒有html頁面,它是從node.js代碼 – Astro