0

ファイル名は payment.html.erb です

内容:

<form method="POST" action="http://www.example.com" id="my_id" class="form">
 <input type="hidden" name="Timestamp" value="2013-09-29T08:05:14.Z"/>
 <input type="hidden" name="Signature" value="dd01adafd2689b243d6cbc9088da2bf699976eb0"/>
 <input type="hidden" name="Amount" value="1"/>
<input type="text" name="AccountName" value="" placeholder="account name"/>
<p></p>
<select name="ExpireMonth">
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
  <option value="11">11</option>
  <option value="12">12</option>
</select>
<select name="ExpireYear">
  <option value="2017">2017</option>
  <option value="2018">2018</option>
  <option value="2019">2019</option>
  <option value="2020">2020</option>
</select>
<input type="submit" class="yyy" id="xxx" value="submit"/>
</form>

私はファイルから読み取っていますが、再びファイルに書き戻す必要があります (既にコード化されています)

非表示の html フィールドをすべて削除し、「フォーム」の開始タグと終了タグも削除します。

ありがとう

4

2 に答える 2

3

HTML や XML の操作にはパーサーを使用する必要がありますが、コンテンツが些細なものであり、完全に制御できる場合を除きます。あなたがそれを所有していない場合、またはそれが些細なことではない場合、偶然にも問題が発生する可能性があり、コードが壊れてクラッシュしたり、マークアップが台無しになったりする可能性があります。

代わりに、ノコギリを使用します。これは XML と HTML の優れたパーサーであり、やろうとしていることを短時間で処理できます。

html =<<EOT
<form method="POST" action="http://www.example.com" id="my_id" class="form">
 <input type="hidden" name="Timestamp" value="2013-09-29T08:05:14.Z"/>
 <input type="hidden" name="Signature" value="dd01adafd2689b243d6cbc9088da2bf699976eb0"/>
 <input type="hidden" name="Amount" value="1"/>
<input type="text" name="AccountName" value="" placeholder="account name"/>
<p></p>
<select name="ExpireMonth">
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
  <option value="11">11</option>
  <option value="12">12</option>
</select>
<select name="ExpireYear">
  <option value="2017">2017</option>
  <option value="2018">2018</option>
  <option value="2019">2019</option>
  <option value="2020">2020</option>
</select>
<input type="submit" class="yyy" id="xxx" value="submit"/>
</form>
EOT

require 'nokogiri'

doc = Nokogiri::HTML::DocumentFragment.parse(html)

doc.css('input[type!="hidden"]').remove

form_contents = doc.at('form').children
doc.at('form').replace(form_contents)

puts doc.to_html

実行すると、次のように出力されます。

 <input type="hidden" name="Timestamp" value="2013-09-29T08:05:14.Z"><input type="hidden" name="Signature" value="dd01adafd2689b243d6cbc9088da2bf699976eb0"><input type="hidden" name="Amount" value="1"><p></p>
<select name="ExpireMonth"><option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option></select><select name="ExpireYear"><option value="2017">2017</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option></select>

Nokogiri などのパーサーは問題なく処理できます。

さらに、パーサーはこの有効なマークアップを処理できます。

<input
  type="text"
  name="AccountName"
  value=""
  placeholder="account name"
/>

正規表現を使用して、gsubそれまたはこれを削除してみてください。

<input type="text"name="AccountName"value="<your name goes here>"placeholder="account name"/>
于 2013-09-29T04:05:32.337 に答える