Удалить <div><br> из WKwebview в цели C - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть строка:

<div><br/><div><br/><div style="box-sizing: border-box; font-family: 'Segoe UI', 'Helvetica Neue', 'Apple Color Emoji', 'Segoe UI Emoji', Helvetica, Arial, sans-serif; font-size: 14px;"><br/><div data-tid="messageBodyContainer"><br/><div data-tid="messageBodyContent"><br/><div>Thanks for agreeing to participate in our online bulletin board </div><br/><div><br/></div><br/><div><br/></div><br/></div><br/></div><br/></div><br/></div><br/></div>

Она состоит из множества и
.Эта строка исходит от сервера. Так что это не всегда исправлено.Мне нужно написать некоторую динамическую логику, которая, если она содержит несколько элементов div и br, удаляет только она.

1 Ответ

1 голос
/ 23 сентября 2019

Если вы получите html в виде строки, вы можете проанализировать его с помощью регулярного выражения

// Original string
let htmlString = "<div><br/><div><br/><div style=\"box-sizing: border-box; font-family: 'Segoe UI', 'Helvetica Neue', 'Apple Color Emoji', 'Segoe UI Emoji', Helvetica, Arial, sans-serif; font-size: 14px;\"><br/><div data-tid=\"messageBodyContainer\"><br/><div data-tid=\"messageBodyContent\"><br/><div>Thanks for agreeing to participate in our online bulletin board </div><br/><div><br/></div><br/><div><br/></div><br/></div><br/></div><br/></div><br/></div><br/></div>"

do {
    // Let regex tell handle the html matching
    let regex = try NSRegularExpression(pattern: "<.*?>", options: NSRegularExpression.Options.caseInsensitive)

    // Get the range for the html string
    let range = NSMakeRange(0, htmlString.count)

    // Replace the regex matches with an empty string
    let parsedString = regex.stringByReplacingMatches(in: htmlString, options: NSRegularExpression.MatchingOptions(), range: range, withTemplate: "")
    print("PARSED HTML STRING:\n  \(parsedString)")    

} catch(let error) {
    print("Error: \(error.localizedDescription)")
}

Поскольку вы не можете контролировать ответ на стороне сервера, если может быть полезно использовать SwiftSoup библиотека.Это хороший нативный интерфейс для html.

РЕДАКТИРОВАТЬ:

Пара вещей: Извините, я пропустил цель-c часть вопроса.Спасибо, что взяли Swift и поехали с ним.Во-вторых, если вам не нужна только строка с тегами html (я неправильно понял исходный вопрос), вам лучше всего использовать stringByReplacingCharactersInRange.Вот пример удаления первого тега div и br.

NSString *removeFirstPass = @"<div><br/>";
NSRange firstPassRange = [htmlString rangeOfString:removeFirstPass];

if (NSNotFound != firstPassRange.location) {
    htmlString = [htmlString stringByReplacingCharactersInRange:firstPassRange withString:@""];
}
NSLog(@"Parsed String: %@", htmlString);

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

...