REXML::Element
文字列が XML として解析され、要素がターゲットに挿入されるように、文字列をに渡す方法はありますか?
3 に答える
2
以下に示すように、REXML::Element クラスを拡張して innerHTML を含めることができます。
require "rexml/element"
class REXML::Element
def innerHTML=(xml)
require "rexml/document"
self.to_a.each do |e|
self.delete e
end
d = REXML::Document.new "<root>#{xml}</root>"
d.root.to_a.each do |e|
case e
when REXML::Text
self.add_text e
when REXML::Element
self.add_element e
else
puts "ERROR"
end
end
xml
end
def innerHTML
ret = ''
self.to_a.each do |e|
ret += e.to_s
end
ret
end
end
その後、javascript の場合と同じように (多かれ少なかれ) innerHTML を使用できます。
require "rexml/document"
doc = REXML::Document.new "<xml><alice><b>bob</b><chuck>ch<u>u</u>ck</chuck></alice><alice/></xml>"
c = doc.root.get_elements('//chuck').first
t = c.innerHTML
c.innerHTML = "#{t}<david>#{t}</david>"
c = doc.root.get_elements('//alice').last
c.innerHTML = "<david>#{t}</david>"
doc.write( $stdout, 2 )
于 2014-09-17T10:31:41.033 に答える
1
あなたが考えていたことを正確に説明するための例を提供していただけると助かります。
JS innerHTML を使用すると、テキストまたは HTML を 1 ショットで挿入でき、変更はすぐに HTML ドキュメントに表示されます。REXML でこれを行う方法を私が知っている唯一の方法は、コンテンツ/要素の挿入とドキュメントの保存/再読み込みを別々の手順で行うことです。
特定の REXML 要素のテキストを変更するには、text=()メソッドを使用できます。
#e represents a REXML Element
e.text = "blah"
別の要素を挿入したい場合は、add_element()メソッドを使用する必要があります。
#e represents a REXML Element
e.add_element('blah') #adds <blah></blah> to the existing element
b = e.get_elements('blah') #empty Element named "blah"
b.text('some text') #add some text to Element blah
そしてもちろん、変更を加えた XML ドキュメントを保存します。ruby-doc.org/REXML/Element
于 2012-05-30T23:02:29.413 に答える
-1
text()
内部コンテンツを文字列として返します
于 2011-08-01T22:09:56.417 に答える