2011-03-22 8 views
8

저는 스칼라와 리프트 프레임 워크를 사용하여 웹 애플리케이션을 개발 중입니다. 나는 페이지스칼라에서 HTML 태그를 제거하십시오.

<b>Hi all, this is perex</b> 

의 HTML을 perex을 포함 DB에 기록을 가지고 그리고 하나 개의 시나리오에서 나는 사용자에게이 perex를 인쇄해야하지만 html 태그없이.

Hi all, this is perex 

스칼라에서는 이것을 수행 할 수 있습니까? 왜냐하면 나는 Google로 보려고했으나 성공하지 못했습니다.

모든 답장을 보내 주셔서 감사합니다. 문자열이 유효한 XML 인 경우

답변

8

당신은 사용할 수 있습니다

scala.xml.XML.loadString("<b>Hi all, this is parex</b>").text

을가 유효하지 않은 XML의 경우에, 당신은 scala.util.matching.Regex를 사용하거나 http://jsoup.org/

+0

. 나는 심지어 "안녕 이름"문자열과 함께 작동 태그에 내 문자열을 포장했다. 고마워. – kajo

+4

필자는 HTML을 파싱하기 위해'scala.xml.parsing.XhtmlParser'를 사용하고 싶습니다. 올바르게 파싱 할 확률이 높아집니다. –

0

가장 좋은 해결책 I와 같은 HTML 구문 분석 라이브러리 귀하의 문자열을 구문 분석하고 "영리한"SAX 이벤트 처리를 수행하려면 cyberneko을 사용하는 것이 좋습니다.

cyberneko는 유효하지 않은 HTML을 구문 분석합니다. 이는 야생에서 만날 수있는 대다수의 HTML의 경우입니다.

ContentHandler을 기본적으로 등록하고 모두 character 이벤트를 제외하고 기본적으로 문자열 작성기에 추가하면 좋은 첫 번째 근사값을 얻을 수 있습니다. 불쾌한 결함이 있습니다. 블록 요소로 구분 된 단어가 끝납니다. 연결됨 (for<br/>example =>forexample).

모든 블록 요소 목록을 얻고 ContentHandler 개의 이벤트를 청취하는 것이 더 좋은 해결책입니다. startElement. 요소가 블록 인 경우 문자열 작성기에 공백 문자를 추가하십시오.

이것이 제대로 작동하는 동안, 사용 사례에 완벽하지 않을 수 있습니다. <br/>은 예를 들어 줄 바꿈으로 바뀌지 않습니다. 필요한 경우 추가하는 것이 너무 많은 작업이 아니어야합니다.

0

TagSoup은 실제 세계 HTML 파일을 구문 분석하기위한 요구 사항을 충족해야합니다.

SBT 종속

libraryDependencies += "org.ccil.cowan.tagsoup" % "tagsoup" % "1.2.1" 

샘플 코드,

object TagSoupXmlLoader { 

    private val factory = new SAXFactoryImpl() 

    def get(): XMLLoader[Elem] = { 
    XML.withSAXParser(factory.newSAXParser()) 
    } 
} 

사용, 나는 지금 당신의 솔루션을 사용하고 작동 보인다

val root = TagSoupXmlLoader.get().load("http://www.google.com") 
println(root) 
관련 문제