Neo4j中apoc.load.html的jQuery选择器未返回预期结果问题
解决APOC加载HTML表格数据的选择器问题
看起来你在使用Neo4j的APOC工具加载HTML表格时遇到了选择器不生效的问题,我来帮你梳理下问题点和解决方案:
问题分析
- 你原本的选择器
#KPILIST ~ div:eq(0) div > table tr没返回结果,大概率是因为jsoup的CSS选择器逻辑和jQuery有差异,:eq(0)在这里的匹配范围可能不符合预期,加上~是通用兄弟选择器,容易选中无关元素。 - 用
table:eq(0)返回两个表格,是因为这个选择器没有限定父容器,直接匹配了页面上所有的<table>标签,自然会返回全部两个表格。
修正后的Cypher代码
要精准获取第一个表格的3行数据,你可以调整选择器为相邻兄弟选择器,锁定目标容器:
// Blah Blah CALL apoc.load.html("file:///XXX.html", {line: "#KPILIST + div div table tr"}) YIELD value as lineList UNWIND lineList.line as L RETURN L
选择器说明
#KPILIST + div:精准选中<h2 id='KPILIST'>紧挨着的下一个兄弟div,也就是包裹第一个表格的外层容器,这样就排除了第二个表格的容器。- 后续的
div table tr会定位到这个容器内的表格所有行,包含表头行和两行数据行,正好是你需要的3行。
如果你想更严谨,也可以用:first-child来强化限定:
CALL apoc.load.html("file:///XXX.html", {line: "#KPILIST ~ div:first-child div > table tr"}) YIELD value as lineList UNWIND lineList.line as L RETURN L
内容的提问来源于stack exchange,提问作者Bruno C
相关产品推荐
相关产品推荐

