Разбор HTML в обычный текст, но сохранение информации тега на символ - PullRequest
0 голосов
/ 18 декабря 2018

Я ищу метод для анализа HTML (или Markdown, но я могу преобразовать это в HTML) в обычный текст, но затем определить, какие теги применяются для каждого символа по очереди.

Итак, дляНапример, если бы у меня был следующий HTML:

<p>Hello <em>world</em>!</p>

, я бы получил простой текст:

Hello world!

и мог бы запрашивать разные символы, чтобы выяснить, какие теги применяются:

Character 0 -> H -> p
Character 1 -> e -> p
Character 2 -> l -> p
...
Character 6 -> w -> p, em
Character 7 -> o -> p, em
...
Character 11 -> ! -> p

Кто-нибудь может предложить способ сделать это?Звучит так, как будто это не должно быть слишком сложно, поэтому я подозреваю, что я просто искал неправильную терминологию, чтобы найти что-то подходящее.

В идеале это будет использовать JSoup или что-то подобное, но с удовольствием выберу другие подходыи библиотеки, если они работают!

ОБНОВЛЕНИЕ: Кроме того, мне нужно иметь возможность разделять смежные идентичные теги.Так что для HTML:

<p>Hello</p><p>World</p>

Я бы мог определить p#1 и p#2.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018
@Test
public void testCharMapping() {
    charMapping("<p>Hello <em>world</em>!</p>");
    charMapping("<p>Hello</p><p>World</p>");
}

private void charMapping(String html) {
    System.out.println("char mapping for : " + html);
    for (Element e : Jsoup.parse(html).select("*")) {
        if (e.ownText() != null && !e.ownText().isEmpty())
            for (char c : e.ownText().toCharArray())
                System.out.println(c + " -> " + e.cssSelector());
    }
    System.out.println("====================");
}

Ответ:

char mapping for : <p>Hello <em>world</em>!</p>
H -> html > body > p
e -> html > body > p
l -> html > body > p
l -> html > body > p
o -> html > body > p
  -> html > body > p
! -> html > body > p
w -> html > body > p > em
o -> html > body > p > em
r -> html > body > p > em
l -> html > body > p > em
d -> html > body > p > em
====================
char mapping for : <p>Hello</p><p>World</p>
H -> html > body > p:nth-child(1)
e -> html > body > p:nth-child(1)
l -> html > body > p:nth-child(1)
l -> html > body > p:nth-child(1)
o -> html > body > p:nth-child(1)
W -> html > body > p:nth-child(2)
o -> html > body > p:nth-child(2)
r -> html > body > p:nth-child(2)
l -> html > body > p:nth-child(2)
d -> html > body > p:nth-child(2)
====================
0 голосов
/ 18 декабря 2018

Вы можете выполнить синтаксический анализ стека для тегов html и для строк внутри, позиция может быть сохранена при извлечении элементов из стека.

...