Je dispose d'un modèle de document XML:XmlSlurper namespaces non utilisés
<TriadMessage xmlns="http://www.myco.com/02/11/2008/V1/TriadMessage.xsd"
xmlns:triad="http://www.myco.com/02/11/2008/V1/TriadTypes.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<TriadRouteInfo>
<triad:RoutingCorrelationId>new value goes here</triad:RoutingCorrelationId>
...
que je lus à l'aide Groovy 1.7:
triadDoc = new XmlSlurper().parseText(xmlMessage).declareNamespace(
tm: "http://www.myco.com/02/11/2008/V1/TriadMessage.xsd",
triad: "http://www.myco.com/02/11/2008/V1/TriadTypes.xsd",
xsi: "http://www.w3.org/2001/XMLSchema-instance"
)
xmlBuilder = new StreamingMarkupBuilder()
writer = xmlBuilder.bind {mkp.yield triadDoc}
insérer ensuite les valeurs dans le document:
triadDoc.TriadRouteInfo.RoutingCorrelationId = dto.getReportRevisionId()
...
et sortie:
writer.toString()
C'est ce que mon document ressemble à:
<?xml version="1.0" encoding="UTF-8"?>
<tm:TriadMessage xmlns:tm="http://www.myco.com/02/11/2008/V1/TriadMessage.xsd">
<tm:TriadRouteInfo>
<triad:RoutingCorrelationId xmlns:triad="http://www.myco.com/02/11/2008/V1/TriadTypes.xsd">24670</triad:RoutingCorrelationId>
...
Notez que l'espace de noms triade apparaît avec chaque élément. Il y a beaucoup de ces lignes (j'en montre seulement une ici). Je veux avoir le NS déclaré au sommet seulement et référé via triade: ci-dessous. Qu'est-ce que je fais mal?