blah blah

gpath 로 값 뽑을 때 포함된 tag 를 보존하려면

gpath 의 간편함에 감탄한지 채 얼마 안되어 예상치않은 문제에 직면.


<contenttitle>End of Grace Period</contenttitle>
<viewdate>2011-06-24 08</viewdate>
<contents>
<contentimg/>
<content>
<p><b>tag test</b></p>
</content>
</contents>

    def xml = new XmlSlurper().parse(xmlFile)
    assert “<p><b>tag test</b></p>” == xml.contents.content.text()
   

어찌나 간편하고 깔끔하던지 값에 포함된 태그들을 알아서 다 날려버리더군요.

결국 이번 같은 경우나 CDATA  값을 그대로 가져오려는 경우 gpath 사용 시 문제가 있네요.

XmlSlurper 대신 XmlParser 를 이용해도 쉽게 해결할 수 있을 것 같지 않고 결국 Xml 파서를 JDOM 이나 이런 것으로 바꿔야하나 갈등하다가 약간 꽁수를 써봤습니다.

    def xml = new XmlSlurper().parse(xmlFile)
    content = XmlUtil.serialize(xml.contents.content)
    def matches = content =~ /(?s)<content>(.*?)<\/content>/
    matches.each { assert “<p><b>tag test</b></p>” == it[1] }

핵심은 GPathResult 를 groovy.xml.XmlUtil.serialize 를 이용해서 XML string 으로 재변환한 뒤 정규식으로 값을 재추출하는거.

p.s. 기본 아이디어는 ‘Convert GPathResult to String without tag0‘에서 구했습니다.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s