簡體   English   中英

將HTML解析為純文本,但保留每個字符的標簽信息

[英]Parsing HTML to plain text, but retaining tag information per character

我正在尋找一種將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#1p#2

@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)
====================

您可以對html標簽和內部字符串進行基於堆棧的解析,可以在從堆棧中彈出元素時存儲位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM