2011-08-01 16 views

回答

1

這將有助於如果你能提供一個例子來進一步說明你腦子裏到底是什麼。

使用JS innerHTML,您可以在一次插入中插入文本或HTML,並立即在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

+0

我發佈了這個問題已經有幾個月了,但我想我想要的基本上是JS的innerHTML功能。我有一些外部XML,我只想將它們轉儲到現有文檔中,而不必先解析它。呃,好吧。 – rampion

+0

不用擔心。如果您正在考慮將外部XML轉儲到現有的HTML文檔中,那麼Javascript將成爲一種可行的方式[w3schools.com](http://www.w3schools.com/dom/dom_loadxmldoc.asp)。否則,您將創建一個新的REXML文檔,方法是將字符串傳遞給__doc = Document.new(' ...')__然後使用__doc.write(output = File.open('blah.xml', 'W'))__ – rbnewb

-1

text()將返回內部內容作爲字符串

1

您可以擴展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)