2014-11-17 4 views
1

Groovy에서 html 코드를 수정하려고합니다. XMLSlurper를 사용하여 구문 분석했습니다. 문제는 텍스트 및 어린이 태그가 포함 된 특정 태그의 텍스트를 편집해야한다는 것입니다. HTML 코드는 다음과 같습니다 그루비에서Groovy에서 XMLSlurper를 사용하여 html 태그 텍스트를 얻는 방법

<ul><li>Text to modify<span>more text</span></li></ul> 

나는이 코드를 시도하고있다 :

def ulDOM = new XmlSlurper().parseText(ul); 
def elements = ulDOM.li.findAll{ 
    it.text().equals("text i am looking for"); 
} 

문제는 it.text()가 그것의 텍스트를 반환하기 때문에 내가 '요소'에 빈 배열을 가지고있다 '노드와 함께 전체 DOM 하위 트리 텍스트 노드. 이 경우 "텍스트를 수정 텍스트". 참고 contains() 메서드는 내 솔루션 충분하지 않습니다.

내 질문은 특정 태그에서 정확한 텍스트를 얻고 전체 DOM 하위 트리의 텍스트를 가져 오는 방법입니까?

+0

나를 위해 약간 불분명하다. SSCCE를 제공하십시오. – Opal

+0

이 질문에 대한 하향식은 grooy를 이해하지 못하는 사람 (또는 Java 스크립트를 말한 사람)이 작성한 것입니다. 연구 및 명확성을 위해 +1. – Jayan

+0

'Jayan'이해해 주셔서 감사합니다. 어떻게하면 더 간단한 질문을 할 수 있을지 모르겠군요 ... – Bazyl

답변

1

.text() 자녀 및 추가를 평가합니다. 따라서 항상 병합 된 행이 포함됩니다.

localText()를 사용 하시겠습니까? 기대했던 것만 큼 틀린 문자열 배열을 반환합니다.

import org.testng.Assert 

ul='''<ul> 
      <li>Text to modify<span>more text</span> 
      </li> 
     </ul> ''' 

def ulDOM = new XmlSlurper().parseText(ul); 


def elements = ulDOM.li.findAll{ 
    String[] text = it.localText(); 
    text[0].equals("Text to modify"); 
} 
Assert.assertTrue(elements.size()==1) 
+0

고마워요. localText() 메소드는 내가 찾고있는 메소드였습니다. 질문은 내가 문서 [여기] (http://groovy.codehaus.org/api/groovy/util/slurpersupport/GPathResult.html)에서 찾을 수없는 이유입니다. – Bazyl

+1

어쨌든 나는 html 구문 분석을 위해 이미 라이브러리를 변경합니다. 나는 JSoup를 사용했고 5 분 만에 그것을했다. .. 그래서 groovy에서 html 수정을 괴롭히는 누군가를 위해 그것을 추천한다. – Bazyl

+0

좋아요. 평범한 html 조작을 요구하는 사람이 있다면, 항상 첫 번째 추천은 항상 jsoup입니다. 나는 나의 편집이 그것을 더 나쁘게 만들었다 고 생각한다. 그 태그를 제거하고 일반 xml 편집으로 생각합니다. – Jayan