사용자 도구

사이트 도구


groovy:xml

Groovy XML

XMLParser

Namespace

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()
}

XML Builder

  • MarkupBuilder
  • StreamingMarkupBuilder : mkp를 통해 각종 설정 가능.
  • Groovy MarkupBuilder name conflict 생성할 XML 태그 이름이 이미 Groovy Object에 존재하는 메소드 이름일 경우 충돌 해결 conflict
    // <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>

Pretty Print

println XmlUtil.serialize(xmlDocument) // 문자열 혹은 SteramingMarkupBuilder 객체 등.

DOMBuilder

groovy/xml.txt · 마지막으로 수정됨: 2017/12/27 08:29 저자 kwon37xi