2010-03-24 6 views
1

J'ai une forme dans un fichier .html où entrée/boîte de sélection ressemble à cecianalyse syntaxique HTML - chercher et les données de mise à jour à partir du fichier .html

<input type="text" id="txtName" name="txtName" value="##myName##" /> 

<select id="cbGender" name="cbGender"> 
<option>Select</option> 
<option selected="selected">Male</option> 
<option>Female</option> 
</select> 

je aurais besoin d'enlever « ## » zone de texte de valeur et mettez-les à jour avec des valeurs différentes si nécessaire dans la zone de texte/checkbox/selectbox. Je connaîtrais l'identifiant des types d'entrée. Le code doit être écrit dans groovy. Des idées?

Répondre

1

Cela semble fonctionner pour moi (a pris un peu d'essais et d'erreurs)

@Grab(group='org.ccil.cowan.tagsoup', module='tagsoup', version='1.2') 
import org.ccil.cowan.tagsoup.* 
import groovy.xml.* 

String htmlTxt = """<html> 
    <body> 
    <input type="text" id="txtName" name="txtName" value="##myName##" /> 
    <select id="cbGender" name="cbGender"> 
     <option>Select</option> 
     <option selected="selected">Male</option> 
     <option>Female</option> 
    </select> 
    </body> 
</html>""" 

// Define our TagSoup backed parser 
def slurper = new XmlSlurper(new Parser()) 

// Parse our html 
def h = slurper.parseText(htmlTxt) 

// Find the input with the id 'txtName' 
def i = h.body.input.list().find { [email protected] == 'txtName' } 

// Change it's value 
[email protected] = 'new value' 

// Write it out (into a StringWriter for now) 
def w = new StringWriter() 
w << new StreamingMarkupBuilder().bind { 
    // Required to avoid the html: namespace on every node 
    mkp.declareNamespace '':'http://www.w3.org/1999/xhtml' 
    mkp.yield h 
} 
// XmlUtil.serialize neatens up our resultant xml -- but adds an xml declaration :-(
println new XmlUtil().serialize(w.toString()) 

[ modifier]

Que g ives ce résultat:

<?xml version="1.0" encoding="UTF-8"?> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <body> 
    <input id="txtName" name="txtName" value="new value" type="text"/> 
    <select id="cbGender" name="cbGender"> 
     <option>Select</option> 
     <option selected="selected">Male</option> 
     <option>Female</option> 
    </select> 
    </body> 
</html> 
+0

Merci beaucoup cela a fonctionné. –

1

XmlParser de Groovy prend en charge la lecture et la mise à jour des documents XML.

1

Je vous suggère d'utiliser le constructeur groovy intégré. Il peut également fonctionner avec un analyseur personnalisé SAX comme TagSoup.

Vous pouvez facilement faire des choses comme

tbl.tr.list().each { row -> 

} 

comme décrit here ..

Questions connexes