neo4j: CALL APO C .LOAD. HTML с заголовками - PullRequest
1 голос
/ 22 января 2020

У меня есть следующая таблица

<table>
    <tr>
        <th> header 1</th>
        <th> header 2</th>
        <th> header 3</th>
    <tr>
        <td> keyword1 </td>
        <td> value1.2 </td>
        <td>
            <p> paragraph 1 </p>
        </td>
    </tr>
    <tr>
        <td> keyword2 </td>
        <td> value2.2 </td>
        <td>
            <p> paragraph 2 </p>
            <p> paragraph 3 </p>
        </td>
    </tr>
    <tr>
        <td> keyword3 </td>
        <td> value3.2</td>
        <td>
            <p> paragraph 1 </p>
            <p> paragraph 3 </p>
            <p> </p>
        </td>
    </tr>
</table>

Какой метод вы предлагаете использовать для загрузки через apo c .load. html и apo c .node.create или apo c .node.merge, чтобы заголовки динамически использовались в качестве имен свойств узла?

Это должно создать динамический c эквивалентный приведенный ниже код состояния c:

MERGE(:node {name:keyword1, header2:value1.2})-[:R]->(:header3 {name:paragrap1})

MERGE(:node {name:keyword2, header2:value2.2})-[:R]->(:header3 {name:paragrap2})
MERGE(:node {name:keyword2, header2:value2.2})-[:R]->(:header3 {name:paragrap3})

MERGE(:node {name:keyword3, header2:value3.2})-[:R]->(:header3 {name:paragrap1})
MERGE(:node {name:keyword3, header2:value3.2})-[:R]->(:header3 {name:paragrap3})

Я написал приведенный ниже код ...

// 999. SAMPLE CODE
CALL apoc.load.html("file:///C:/Users/sesa407003/Desktop/CURRENT%20PROJECTS/NEO4J/doc_start.html",{line: "table tr"}) yield value as lineList

CALL apoc.load.html("file:///doc_start.html",{header: "table tr th"}) yield value as headersList

UNWIND range(1, length(lineList.line) -1) as j
//with j,i,source
CALL apoc.load.html("file:///doc_start.html",{value: "table tr:eq("+j+") td"}) yield value as valueList
CALL apoc.merge.node(["node"], {name:valueList.value[2].text}) yield node as source
UNWIND range(0,length(headersList.header)-2) as i
CALL apoc.create.setProperties(source,[headersList.header[i].text],[valueList.value[i].text]) yield node
CALL apoc.load.html("file:///doc_start.html",{paragraphs: "table tr:eq("+j+") td:eq(2) p"}) yield value as paragraphsList
UNWIND paragraphsList.paragraphs as paragraph
MERGE(target:dashboard {name:paragraph.text})
MERGE(source)-[:R]->(target)
return *

Кажется, что это работает ... но когда я пытаюсь удалить пустые абзацы, например, последний для ключевого слова3 ... я не могу найти правильный синтаксис для WHERE или ДЕЛО, КОГДА или apo c .case.when

1 Ответ

1 голос
/ 22 января 2020

Я посмотрел на ваш шифр и внес несколько изменений. Я ожидаю, что это приблизит вас к вашему конечному состоянию.

Чтобы удалить пустой абзац, я добавил этот маленький WITH блок

WITH source, paragraph.text AS para
WHERE trim(para) <> ""

Я также изменил несколько индексов массива, чтобы получить правильные данные из таблицы.

CALL apoc.load.html("file:///table.html",{line: "table tr"}) yield value as lineList
CALL apoc.load.html("file:///table.html",{header: "table tr th"}) yield value as headersList
UNWIND range(1, size(lineList.line) - 1) as j
CALL apoc.load.html("file:///table.html",{value: "table tr:eq("+j+") td"}) yield value as valueList
CALL apoc.merge.node(["node"], {name:valueList.value[0].text}) yield node as source
UNWIND range(0,size(headersList.header)-2) as i
CALL apoc.create.setProperties(source,[headersList.header[i].text],[valueList.value[i].text]) yield node
CALL apoc.load.html("file:///table.html",{paragraphs: "table tr:eq("+j+") td:eq(2) p"}) yield value as paragraphsList
UNWIND paragraphsList.paragraphs as paragraph
WITH source, paragraph.text AS para
WHERE trim(para) <> ""
MERGE(target:dashboard {name:para})
MERGE(source)-[:R]->(target)
RETURN *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...