将列表与 neo4j 中的字符串进行比较,阅读自 HTML

Comparing List to String in neo4j, reading from HTML

这是我的问题: 假设我有一个 HTML 文件,其中包含如下 table

<table>
    <tr>
        <td> keyword1 </td>
        <td>
            <p> paragraph 1 </p>
        </td>
    </tr>
    <tr>
        <td> keyword2 </td>
        <td>
            <p> paragraph 2 </p>
            <p> paragraph 3 </p>
        </td>
    </tr>
    <tr>
        <td> keyword3 </td>
        <td>
            <p> paragraph 1 </p>
            <p> paragraph 3 </p>
        </td>
    </tr>
</table>

我使用以下代码从 HTML

中提取信息
CALL apoc.load.html("file:///input_HTML.html",{kwords:"table tr td:eq(1)",
paragraphs:"table tr td:eq(2)",paragraphsList:"table tr td:eq(2) p"}) YIELD value

我想在最后得到的是,对于 table 的每个输入行,类似于下面的语句,但当然是在读取 HTML 文件时动态创建的

CREATE(:kwords {name:"keyword1"})-[:'APPEARS_IN']->(:paragraph {name:"paragraph1"})

棘手的部分是获取段落名称...有什么提示吗?

您需要寻找索引为 1td 元素;元素索引从 0.

开始
...
paragraphs:"table tr td:eq(1)",paragraphsList:"table tr td:eq(1)
...

但我不确定它是否仍然能让你做你想做的事。

如何一次性获取关键字,然后在第二遍中为每个关键字选择段落。

CALL apoc.load.html("file:///input_HTML.html",{kwords: "tr td:eq(0)"}) YIELD value
UNWIND value.kwords AS kw
WITH kw.text AS kw
CALL apoc.load.html("file:///input_HTML.html",{paras: 'tr:contains(' + kw + ') td:eq(1) p'}) YIELD value
UNWIND value.paras AS para
MERGE (k:kwords {name: kw }) 
MERGE (p:paragraph {name: para.text}) 
MERGE (k)-[:APPEARS_IN]->(p)
RETURN *