일모도원(日暮途遠) 개발자
[iOS개발] SwiftSoap로 \n 문자 추출하기 본문
아라한자 앱에서 한자위에 독음을 달아주는 기능을 만들고 있는데, rb 태그에 있는 값이 \n이면 제대로 읽어오지를 못한다.
(웹뷰에 쓰는 HTML Hurigana tag가 아니라 표준 포맷은 아니다. 제대로 쓸려면 data-를 span태그안의 각 custom attribute안에 붙여야 한다...)
<span pronounce=\"천\" meaning=\"하늘 천\"><ruby><rb>天</rb><rt>천</rt></ruby></span>
<span pronounce=\"\" meaning=\"\"><ruby><rb>\n</rb><rt></rt></ruby></span>
아래와 같은 코드로 rb태그를 읽어오면 "천"은 제대로 읽어오는데, "\n"은 공백(空白, space)으로 읽어온다. 즉 " " 이 되어 버린다.
import SwiftSoup
let text = """
<span pronounce=\"천\" meaning=\"하늘 천\"><ruby><rb>天</rb><rt>천</rt></ruby></span>
<span pronounce=\"\" meaning=\"\"><ruby><rb>\n</rb><rt></rt></ruby></span>
"""
let doc = try SwiftSoup.parse(text)
let rbTags = try doc.select("rb")
for (_, rbTag) in rbTags.enumerated() {
do {
let baseText = try rbTag.html()
} catch {
print("Error parsing text: \(error)")
}
}
챗GPT에게 물어보니 제대로 해결을 못해줘서, 구글링해보니 같은 이슈가 있었다.
.replacingOccurrences(of: "\n", with: "</br>") will fix it ;)
그래서 text에 있는 \n을 <br>로 다 바꾸어 주었다.
let newText = text.replacingOccurrences(of: "\n", with: "<br>")
let doc = try SwiftSoup.parse(newText)
그리고 읽어오고나서는 다시 \n로 바꾸어주어서 사용하니 잘 해결 되었다.
var baseText = try rbTag.html()
baseText = baseText.replacingOccurrences(of: "<br>", with: "\n")
import SwiftSoup
let text = """
<span pronounce=\"천\" meaning=\"하늘 천\"><ruby><rb>天</rb><rt>천</rt></ruby></span>
<span pronounce=\"\" meaning=\"\"><ruby><rb>\n</rb><rt></rt></ruby></span>
"""
let newText = text.replacingOccurrences(of: "\n", with: "<br>")
let doc = try SwiftSoup.parse(newText)
let rbTags = try doc.select("rb")
for (_, rbTag) in rbTags.enumerated() {
do {
var baseText = try rbTag.html()
baseText = baseText.replacingOccurrences(of: "<br>", with: "\n")
} catch {
print("Error parsing text: \(error)")
}
}
'iOS개발 > iOS개발' 카테고리의 다른 글
[iOS개발] 인앱관련 Sandbox관련 리젝 (0) | 2024.05.07 |
---|---|
[iOS개발] print()와 debugPrint() 차이 (0) | 2023.02.24 |
[iOS개발] 파일앱(Files App)에 내 앱 보이기 (0) | 2022.09.04 |
[iOS개발] 앱 평가 요청하기 (0) | 2022.09.04 |
[iOS개발] 앱id (App id, Apple id) 찾기 (0) | 2022.09.04 |