2010-03-24 163 views
1

我有一個.html文件形式,其中輸入/選擇框看起來像這樣HTML解析 - 從.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> 

我需要刪除「##」值文本框獲取和更新數據並根據需要在文本框/複選框/選擇框中使用不同的值更新它們。我會知道輸入類型的ID。代碼是用groovy編寫的。有任何想法嗎?

回答

1

這似乎爲我工作(採取了一些試驗和錯誤的)

@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()) 

[編輯]

那g ives結果:

<?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

非常感謝它的工作。 – 2010-03-25 05:11:33

1

Groovy的XmlParser支持讀取和更新XML文檔。

1

我建議你使用內置的groovy生成器。它也可以使用自定義SAX分析器,如TagSoup

你可以很容易做的事情一樣

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

} 

描述here ..