2011-08-01 5 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

Прошло несколько месяцев с тех пор, как я опубликовал вопрос, но я думаю, что я хотел бы, в основном, функциональность JH's 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 

Затем вы можете использовать innerHTML, как в javascript (более или менее).

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) 
Смежные вопросы