Разбор HTML - выборка и обновление данных из файла .html. - PullRequest
1 голос
/ 24 марта 2010

У меня есть форма в .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>

Мне нужно удалить текстовое поле со значением ##, а также обновить их, добавив, если это необходимо, в текстовое поле / флажок / поле выбора Я бы знал идентификатор типов ввода. Код должен быть написан на Groovy. Есть идеи?

Ответы [ 3 ]

1 голос
/ 24 марта 2010

Я бы предложил вам использовать встроенный Groovy Builder. Он также может работать с пользовательским SAX синтаксическим анализатором, таким как TagSoup .

Вы можете легко делать такие вещи, как

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

}

как описано здесь ..

1 голос
/ 24 марта 2010

Это, кажется, работает для меня (потребовалось немного проб и ошибок)

@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 { it.@id == 'txtName' }

// Change it's value
i.@value = '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() )

[править]

Это дает такой результат:

<?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>
1 голос
/ 24 марта 2010

Groovy XmlParser поддерживает чтение и обновление документов XML.

...