2010-09-10 2 views
4

Je veux avoir la sortie suivante:espaces de nommage dans Groovy MarkupBuilder

<?xml version="1.0" encoding="UTF-8"?> 
<structure:structuralDataRoot xmlns:register="http://www.test.ch/register/1" xmlns:structure="http://test.ch/structure/1" > 
    <structure:tester>ZH</structure:tester> 
    <structure:surveyYear>2001</structure:surveyYear> 
    <structure:surfaceData> 
    <structure:houseSurfaceData> 
     <structure:creationDate>2001-01-01</structure:creationDate> 
     <structure:localFarmId> 
     <register:houseIdCategory>token</register:houseIdCategory> 
     <register:houseId>token</register:houseId> 
     </structure:localFarmId> 
    </structure:houseSurfaceData> 
    </structure> 

je peux ajouter l'espace de noms à un xml comme ceci:

xml.records('xmlns:structure' :"http://test.ch/structure/1" ... 

Mais comment je peux faire un préfixe d'espace de noms à un xml-element? La seule solution que j'ai trouvé ceci:

tester('xmlns:structure' :"http://test.ch/structure/1", 'ZH') 

Mais cela me donne la sortie follwing:

<tester xmlns:structure='http://test.ch/structure/1'>ZH</tester> 

Il est correct syntactique, mais pas agréable à lire quand vous avez beaucoup de nœuds.

Répondre

9

Vous pouvez le faire (pas sûr que c'est ce que vous voulez bien)

import groovy.xml.StreamingMarkupBuilder 
import groovy.xml.XmlUtil 

def xmlBuilder = new StreamingMarkupBuilder() 
writer = xmlBuilder.bind { 
    mkp.declareNamespace(register: "http://www.test.ch/register/1") 
    mkp.declareNamespace(structure: "http://test.ch/structure/1") 
    'structure:structuralDataRoot' { 
    'structure:tester'('ZH') 
    'structure:surveyYear'(2001) 
    'structure:surfaceData' { 
     'structure:houseSurfaceData' { 
     'structure:creationDate'('2001-01-01') 
     'structure:localFarmId' { 
      'register:houseIdCategory'('token') 
      'register:houseId'('token') 
     } 
     } 
    } 
    } 
} 

println XmlUtil.serialize(writer) 

que les sorties de code:

<?xml version="1.0" encoding="UTF-8"?> 
<structure:structuralDataRoot xmlns:register="http://www.test.ch/register/1" xmlns:structure="http://test.ch/structure/1"> 
    <structure:tester>ZH</structure:tester> 
    <structure:surveyYear>2001</structure:surveyYear> 
    <structure:surfaceData> 
    <structure:houseSurfaceData> 
     <structure:creationDate>2001-01-01</structure:creationDate> 
     <structure:localFarmId> 
     <register:houseIdCategory>token</register:houseIdCategory> 
     <register:houseId>token</register:houseId> 
     </structure:localFarmId> 
    </structure:houseSurfaceData> 
    </structure:surfaceData> 
</structure:structuralDataRoot> 
+0

Yeap il le fait, je vous remercie. – haschibaschi

+0

Comment est déclaré 'mkp'? –

Questions connexes