groovy.xml.Namespace
Namespace가 존재할 경우 각 노드의 이름(QName)구조가 달라진다. pom.xml
파일을 파싱한다고 했을 때 다음과 같이한다.
def pom = new XmlParser().parse(new File('pom.xml')) def ns = new groovy.xml.Namespace('http://maven.apache.org/POM/4.0.0') def items = pom[ns.dependencies][ns.dependency][ns.scope].findAll { it.text() == "optional" }.each { println it.text() }
MarkupBuilder
StreamingMarkupBuilder
: mkp
를 통해 각종 설정 가능.// <identity>....</identity> identity([:]) { groupId(catalog.groupId) artifactId(catalog.artifactId) version(catalog.version) } // 뒤에 ([:]) 로 호출하여 다른 메소드 시그너처로 바꿔치기함
delegate.tagname
으로 충돌해소 가능 Groovy Goodness: Solve Naming Conflicts with Builders def builder = new MarkupBuilder(writer) builder.message { delegate.body(contentType: 'plain') { text 'Simple message' } } // --> <message> <body contentType='plain'> <text>Simple message</text> </body> </message>
println XmlUtil.serialize(xmlDocument) // 문자열 혹은 SteramingMarkupBuilder 객체 등.