Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby REXML:javascript DOM的等价物';s.innerHTML=_Ruby_Xml_Rexml - Fatal编程技术网

Ruby REXML:javascript DOM的等价物';s.innerHTML=

Ruby REXML:javascript DOM的等价物';s.innerHTML=,ruby,xml,rexml,Ruby,Xml,Rexml,有没有一种方法可以将字符串传递给REXML::Element,从而将字符串解析为XML,并将找到的元素插入到目标中?text()将以字符串的形式返回内部内容如果您可以提供一个示例来进一步说明您的想法,这将有所帮助 使用JS innerHTML,您可以一次插入文本或HTML,更改将立即显示在HTML文档中。我知道如何在REXML中实现这一点的唯一方法是使用插入内容/元素和保存/重新加载文档的单独步骤 要修改特定REXML元素的文本,可以使用text=()方法 #e represents a REX

有没有一种方法可以将字符串传递给
REXML::Element
,从而将字符串解析为XML,并将找到的元素插入到目标中?

text()
将以字符串的形式返回内部内容

如果您可以提供一个示例来进一步说明您的想法,这将有所帮助

使用JS innerHTML,您可以一次插入文本或HTML,更改将立即显示在HTML文档中。我知道如何在REXML中实现这一点的唯一方法是使用插入内容/元素和保存/重新加载文档的单独步骤

要修改特定REXML元素的文本,可以使用text=()方法

#e represents a REXML Element
e.text = "blah"
#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
如果要插入另一个元素,必须使用添加元素()方法

#e represents a REXML Element
e.text = "blah"
#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
#e表示一个REXML元素
e、 添加元素(“blah”)#添加到现有元素
b=e.get_元素('blah')#名为“blah”的空元素
b、 文本(“一些文本”)#向元素blah添加一些文本

然后当然保存XML文档和更改

您可以扩展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
需要“rexml/元素”
类REXML::元素
def innerHTML=(xml)
需要“rexml/文档”
每个人都有|
自我删除
结束
d=REXML::Document.new“#{xml}”
d、 根,根,根,根,根|
案例e
当REXML::Text
self.add_文本e
当REXML::元素
self.add_元素e
其他的
“错误”
结束
结束
xml
结束
def innerHTML
ret=''
每个人都有|
ret+=东至西
结束
ret
结束
结束
然后,您可以像在javascript中一样使用innerHTML(或多或少)

需要“rexml/document”
doc=REXML::Document.new“bobchuck”
c=doc.root.get_元素('//chuck')。首先
t=c.innerHTML
c、 innerHTML=“#{t}#{t}”
c=doc.root.get_元素('//alice')。最后
c、 innerHTML=“#{t}”
文件写入($stdout,2)

我发布这个问题已经有几个月了,但我想我想要的基本上是JS的innerHTML功能。我有一些外部XML,我只想将其转储到现有文档中,而不必首先解析它。好吧,不用担心。如果您正在考虑将外部XML转储到现有HTML文档中,Javascript将是一个不错的选择。否则,您将通过向doc=Document.new(“…”)传递一个字符串,然后使用doc.write(output=file.open('blah.xml','w')写入一个文件来创建一个新的REXML文档