2009-06-11 6 views
1

J'ai un document Word enregistré au format xml. Dans ce document, il y a des balises GString comme $ name.Remplacer les balises GString dans un fichier

Dans mon code groovy, je charge le fichier xml pour remplacer cette balise GString comme ceci:

def file = new File ('myDocInXml.xml') 
    def name = 'myName' 
    file.eachLine { line -> 
     println line 
    } 

Mais cela ne fonctionne. La balise GString ne sera pas remplacée par ma variable 'nom'.

Quelqu'un peut-il m'aider?

THX

+0

gStrings sont chauds, pourquoi voulez-vous vouloir en remplacer un? – user105033

+0

Bonjour, J'ai un document d'un mot qui est enregistré au format xml. J'ai remplacé certaines informations par GString Tag comme $ name, $ address, $ city ... Et je voudrais remplacer ces tags par des données provenant de ma base de données. Merci pour votre réponse. –

Répondre

5

Mieux vaut utiliser un modèle ici. Chargez le fichier xmml en tant que modèle et créez une liaison pour remplacer les espaces réservés. Un exemple simple pourrait être comme

def xml=''' 
<books> 
<% names.each { %> 
<book> 
$it 
</book> 
<%}%> 

</books> 
''' 
def engine=new groovy.text.SimpleTemplateEngine() 
def template=engine.createTemplate(xml) 
def binding=[names:['john','joe']] 
template.make(binding) 
+0

Droite. Le problème est que le chargement d'un fichier XML ne déclenche pas l'évaluation GString. –

+0

Merci pour votre réponse! Je crée un template avec un fichier fileReader ouvert sur mon fichier xml, et ça marche maintenant =) Bonne journée –

1

Actuellement, l'approche est la modélisation. Mais vous voudrez peut-être garder un œil sur ce problème dans JIRA GROOVY-2505. Il est une demande de fonctionnalité pour convertir une chaîne en GString dans les cas où la chaîne est lue à partir d'une source externe:

Plusieurs fois il a été demandé sur la liste de diffusion sur la façon de soit convertir une chaîne GString ou pour évaluer une chaîne en tant que GString. Le besoin se fait sentir lorsqu'une chaîne provient d'une source externe et contient une expression GString , par exemple un fichier XML ou un fichier de configuration. Actuellement, un doit invoquer le GroovyShell ou le SimpleTemplateEngine à accomplir la tâche. Dans les deux cas cela prend plusieurs lignes de code et n'est pas intuitivement évident. On pourrait éther ajouter une méthode GDK à cordes tels que « évaluer » (qui, à mon humble avis serait la plus belle) ou fournissent une conversion de la forme « String comme GString »

0

assez vieux question, cependant, question http://jira.codehaus.org/browse/GROOVY-2505 toujours pas résolue ... Il existe une solution intéressante, qui se comporte presque comme la substitution GString, en utilisant la classe Apache StrSubstitutor. Pour moi, il est plus confortable que la création de modèles - vous pouvez utiliser Gstrings dans des fichiers XML:

import org.apache.commons.lang.text.StrSubstitutor 

strResTpl = new File(filePath + "example.xml").text 

def extraText = "MY EXTRA TEXT" 

map = new HashMap(); 
map.put("text_to_substitute", "example text - ${extraText}") 

def result = new StrSubstitutor(map).replace(strResTpl); 

fichier XML:

<?xml version="1.0" encoding="UTF-8"?> 
<eample> 
    <text_to_substitute>${text_to_substitute}</text_to_substitute> 
</example> 

Résultat:

<?xml version="1.0" encoding="UTF-8"?> 
<eample> 
    <text_to_substitute>example text - MY EXTRA TEXT</text_to_substitute> 
</example> 
Questions connexes