2017-05-18 9 views
0

의 문자열로 전체 노드를 검색하고 나는 다음과 같은 노력하고 있어요 : 내가 값을 얻고, 그러나내가 <code>String</code>의 배열로 <code><logs></code>의 요소를 검색 할 XmlSlurper

import groovy.util.XmlSlurper 

def payload = '''<logs> 
<log> 
    <text>LOG 1</text> 
    <timestamp>2017-05-18T16:20:00.000</timestamp> 
</log> 
<log> 
    <text>LOG 2</text> 
    <timestamp>2017-05-18T16:20:00.000</timestamp> 
</log> 
</logs>''' 

def logs = new XmlSlurper().parseText(payload) 
def result = [] 
logs.log.each{ 
    result.add(it) 
} 
result 

을,하지만 난 것 로 전체 노드를 얻기 위해 같은 텍스트, 더 많거나이 적은 :

[<log> 
    <text>LOG 1</text> 
    <timestamp>2017-05-18T16:20:00.000</timestamp> 
</log>, 
<log> 
    <text>LOG 2</text> 
    <timestamp>2017-05-18T16:20:00.000</timestamp> 
</log>] 

이 전혀 가능 XmlSlurper와 아니면 내가 어떤 문자열 작업을 사용해야합니까?

답변

2

당신은 XML 선언 제거하는 XMLUtil을 사용하지만 가질 수

import groovy.util.XmlSlurper 
import groovy.xml.XmlUtil 

def payload = '''<logs> 
<log> 
    <text>LOG 1</text> 
    <timestamp>2017-05-18T16:20:00.000</timestamp> 
</log> 
<log> 
    <text>LOG 2</text> 
    <timestamp>2017-05-18T16:20:00.000</timestamp> 
</log> 
</logs>''' 

def logs = new XmlSlurper().parseText(payload) 

def result = logs.log.collect { 
    XmlUtil.serialize(it).replaceAll(/<.xml.*?>/,"") 
} 

println result 
+0

이것이 가장 우아한 해결책이라고 생각합니다. 감사합니다! –

1

이 시도 :

def payload = '''<logs> 
<log> 
    <text>LOG 1</text> 
    <timestamp>2017-05-18T16:20:00.000</timestamp> 
</log> 
<log> 
    <text>LOG 2</text> 
    <timestamp>2017-05-18T16:20:00.000</timestamp> 
</log> 
</logs>''' 

def logs = new XmlSlurper().parseText(payload) 
def result = [] 
logs.log.each{ 
    result.add("<log> <text>" + it?.'text'.text() + "</text> <timestamp> " + it?.'timestamp'.text() + "</timestamp> </log>") 
} 
return result 
​ 
1

당신은 갈 수 있습니다

def payload = '''<logs> 
<log> 
    <text>LOG 1</text> 
    <timestamp>2017-05-18T16:20:00.000</timestamp> 
</log> 
<log> 
    <text>LOG 2</text> 
    <timestamp>2017-05-18T16:20:00.000</timestamp> 
</log> 
</logs>''' 

def logs = new XmlParser().parseText(payload) 
def result = logs.log.collect { 
    def sw = new StringWriter() 
    def pw = new PrintWriter(sw) 
    new XmlNodePrinter(pw).print(it) 
    sw.toString().replaceAll('\\s', '') 
} 
+0

감사합니다, 그것은 잘 작동합니다! –