有没有一种方法可以将字符串传递给一个字符串,REXML::Element
以便将字符串解析为 XML,并将找到的元素插入到目标中?
问问题
458 次
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,并且更改会立即显示在 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 回答