【问题标题】:REXML: Equivalent of javascript-DOM's .innerHTML=REXML:等效于 javascript-DOM 的 .innerHTML=
【发布时间】:2011-08-01 20:26:43
【问题描述】:

有没有办法将字符串传递给REXML::Element,这样字符串将被解析为 XML,然后将找到的元素插入到目标中?

【问题讨论】:

    标签: ruby xml rexml


    【解决方案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 )
    

    【讨论】:

      【解决方案2】:

      如果你能提供一个例子来进一步说明你的想法会有所帮助。

      使用 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

      【讨论】:

      • 我发布这个问题已经有几个月了,但我认为我想要的基本上是 JS 的 innerHTML 功能。我有一些外部 XML,我想直接转储到现有文档中,而不必先对其进行解析。嗯嗯。
      • 不用担心。如果您正在考虑将外部 XML 转储到现有的 HTML 文档中,那么 Javascript 将是 w3schools.com 的方式。否则,您将通过将字符串传递给 doc = Document.new('...') 创建一个新的 REXML 文档,然后使用 doc.write 写入文件(输出=File.open('blah.xml','w'))
      【解决方案3】:

      text() 将内部内容作为字符串返回

      【讨论】:

        猜你喜欢
        • 2021-12-20
        • 1970-01-01
        • 2011-09-01
        • 2016-05-10
        • 1970-01-01
        • 2012-08-19
        • 2023-03-21
        • 2012-07-07
        • 2016-12-09
        相关资源
        最近更新 更多