사용자 도구

사이트 도구


groovy:xml

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
groovy:xml [2014/02/12 10:35]
kwon37xi
groovy:xml [2017/12/27 08:29] (현재)
kwon37xi [XML Builder]
줄 2: 줄 2:
  
 ===== XMLParser ===== ===== XMLParser =====
-[[http://groovy.codehaus.org/Reading+XML+using+Groovy%27s+XmlParser|Groovy - Reading XML using Groovy's XmlParser]]+  * [[http://groovy.codehaus.org/Reading+XML+using+Groovy%27s+XmlParser|Groovy - Reading XML using Groovy'XmlParser]] 
 +  * [[http://groovy.codehaus.org/Updating+XML+with+XmlParser|Groovy - Updating XML with XmlParser]]
  
 ==== Namespace ==== ==== Namespace ====
 [[http://groovy.codehaus.org/api/groovy/xml/Namespace.html|groovy.xml.Namespace]] [[http://groovy.codehaus.org/api/groovy/xml/Namespace.html|groovy.xml.Namespace]]
-Namespace가 존재할 경우 각 노드의 이름 구조가 달라진다. ''pom.xml'' 파일을 파싱한다고 했을 때 다음과 같이한다.+Namespace가 존재할 경우 각 노드의 이름([[http://groovy.codehaus.org/api/groovy/xml/QName.html|QName]])구조가 달라진다. ''pom.xml'' 파일을 파싱한다고 했을 때 다음과 같이한다.
 <code groovy> <code groovy>
-def pom = new XmlParser(false, true).parse(new File('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 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() }+def items = pom[ns.dependencies][ns.dependency][ns.scope].findAll { 
 +    it.text() == "optional" 
 +}.each { 
 +    println it.text() 
 +}
 </code> </code>
  
 +===== XML Builder =====
 +  * ''MarkupBuilder''
 +  * ''StreamingMarkupBuilder'' : ''mkp''를 통해 각종 설정 가능.
 +  * [[https://stackoverflow.com/questions/11388838/groovy-markupbuilder-name-conflict/11389034#11389034|Groovy MarkupBuilder name conflict]] 생성할 XML 태그 이름이 이미 Groovy Object에 존재하는 메소드 이름일 경우 충돌 해결 conflict<code groovy>
 +// <identity>....</identity>
 +identity([:]) {
 +    groupId(catalog.groupId)
 +    artifactId(catalog.artifactId)
 +    version(catalog.version)
 +}
 +// 뒤에 ([:]) 로 호출하여 다른 메소드 시그너처로 바꿔치기함
 +</code>
 +  * 혹은 ''delegate.tagname'' 으로 충돌해소 가능 [[http://mrhaki.blogspot.kr/2012/01/groovy-goodness-solve-naming-conflicts.html|Groovy Goodness: Solve Naming Conflicts with Builders]] <code groovy>
 +def builder = new MarkupBuilder(writer)
 +builder.message {
 +    delegate.body(contentType: 'plain') {
 +        text 'Simple message'
 +    }
 +}
 +// -->
 +<message>
 +  <body contentType='plain'>
 +    <text>Simple message</text>
 +  </body>
 +</message>
 +</code>
 +===== Pretty Print =====
 +  * [[http://mrhaki.blogspot.kr/2012/10/groovy-goodness-pretty-print-xml.html|Groovy Pretty Print XML]]
 +<code groovy>
 +println XmlUtil.serialize(xmlDocument) // 문자열 혹은 SteramingMarkupBuilder 객체 등.
 +</code>
  
 +===== DOMBuilder =====
 +  * [[http://docs.groovy-lang.org/latest/html/api/groovy/xml/DOMBuilder.html|DOMBuilder]]
  
groovy/xml.1392168934.txt.gz · 마지막으로 수정됨: 2014/02/12 10:35 저자 kwon37xi