안드로이드 개발 팁 #50 - jsoup 활용하여 HTML 요소의 내부 HTML의 단어들 순회 방법steemCreated with Sketch.

jsoup 활용하여 HTML 요소의 내부 HTML의 단어들 순회 방법

No. 50
23.10.08 (일) | Written by @dorian-mobileapp

시작하며…

스팀잇 포스트의 포맷은 마크다운 텍스트입니다. commonmark 라이브러리를 활용하여 이를 HTML 텍스트로 바꿀 수 있는데요. HTML 요소(element)들의 텍스트에서 유튜브 URL이 있으면 이를 iframe 요소로 변경하고자 합니다. 사용자가 이해할 수 없는 URL 대신 동영상을 보여주기 위해서입니다. 마찬가지로 텍스트에서 이미지 URL이 있으면, 이를 img 요소로 대체하고자 합니다. URL 대신 이미지를 보여주기 위해서이지요. 이를 위해서는 각 요소가 보유 중인 텍스트의 각 단어를 순회해야 합니다. 오늘 포스트에서는 jsoup을 활용하여 HTML 요소의 내부 HTML의 단어들을 순회하는 방법을 정리해 봅니다.


필요 라이브러리


jsoup 활용하여 HTML 요소의 내부 HTML의 단어들 순회 방법

(1) 먼저 마크다운 텍스트를 HTML로 변환하고 Element 객체들을 보유하는 Document 객체를 생성하세요.

val document = markdown.convertMarkdownToHtmlDocument()

convertMarkdownToHtmlDocument() 확장 메소드는 이 포스트를 참고하세요.

(2) Document 객체로부터 각 Element 객체를 순회하는 루프를 만드세요. 자식 Element를 갖는 부모 Element에 대해서는 아무 것도 하지 않고 패스합니다.

for (element in document.allElements) {
    if (element.childrenSize() > 0) {
        continue
    }

    // ...
}

(3) 현재 Element로부터 내부 HTML을 읽고, 이를 라인들로 분해하세요.

for (element in document.allElements) {
    if (element.childrenSize() > 0) {
        continue
    }

    val innerHTML = element.html()
    val innerHTMLLines = innerHTML.lines()
    // ...
}

(4) 각 라인으로부터 단어들로 분해하고 이들을 순회하는 루프를 만드세요.

for (element in document.allElements) {
    if (element.childrenSize() > 0) {
        continue
    }

    val innerHTML = element.html()
    val innerHTMLLines = innerHTML.lines()

    innerHTMLLines.forEachIndexed { lineIndex, line ->
        val words = line.split(" ")

        words.forEachIndexed { wordIndex, word ->
            // 이 곳에서 각 단어를 확인하고 일부는 iframe, img 등과 같은 요소로 변환 예정
        }
    }
}

참고 링크


지난 안드로이드 개발 팁


Layout provided by Steemit Enhancer hommage by ayogom


Posted through the ECblog app (https://blog.etain.club)
Sort:  

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Thank you, friend!
I'm @steem.history, who is steem witness.
Thank you for witnessvoting for me.
image.png
please click it!
image.png
(Go to https://steemit.com/~witnesses and type fbslo at the bottom of the page)

The weight is reduced because of the lack of Voting Power. If you vote for me as a witness, you can get my little vote.


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-mobileapp님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.04
TRX 0.33
JST 0.079
BTC 63129.80
ETH 1662.47
USDT 1.00
SBD 0.42