2011-08-01 20 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)