J'écris du code où je récupère du XML à partir d'une API Web, puis j'analyse le XML en utilisant Groovy. Malheureusement, il semble que XmlParser et XmlSlurper pour Groovy dépouillent les caractères newline des attributs des nœuds lorsque .text() est appelé.L'analyse XML dans les bandes Groovy attribue de nouvelles lignes
Comment puis-je obtenir le texte de l'attribut incluant les nouvelles lignes?
Exemple de code:
def xmltest = '''
<snippet>
<preSnippet att1="testatt1" code="This is line 1
This is line 2
This is line 3" >
<lines count="10" />
</preSnippet>
</snippet>'''
def parsed = new XmlParser().parseText(xmltest)
println "Parsed"
parsed.preSnippet.each { pre ->
println pre.attribute('code');
}
def slurped = new XmlSlurper().parseText(xmltest)
println "Slurped"
slurped.children().each { preSnip ->
println [email protected]()
}
la sortie est:
Parsed
This is line 1 This is line 2 This is line 3
Slurped
This is line 1 This is line 2 This is line 3
Ok, j'ai pu convertir le texte avant analysables, puis reconvertir après, à la:
def newxml = xmltest.replaceAll(/code="[^"]*/) {
return it.replaceAll(/\n/, "~#~")
}
def parsed = new XmlParser().parseText(xmltest)
def code = pre.attribute('code').replaceAll("~#~", "\n")
Pas mon hack préféré, mais ça ira jusqu'à ce qu'ils corrigent leur sortie XML.
C'est bon à savoir, et j'ai informé ceux qui génèrent le XML qu'ils le font mal ... toute chance que vous avez un moyen de remplacer seulement les retours chariot dans les attributs d'un fichier XML avec un autre Chaîne de caractères que je peux mettre RETOUR au retour de chariot quand je lis le texte? C'est un hack qui résoudrait ça en attendant le vrai changement XML. – billjamesdev
Vous pouvez essayer de jouer avec des références de caractères et, si cela ne fonctionne pas, des séquences remplaçables personnalisées que vous manipulez vous-même. – SteveD