从外部文件将XML片段注入当前文档

时间:2010-05-25 06:01:02

标签: xml ruby rexml

我目前正在使用REXML解析XML文件,并试图想出一种从内部文件插入XML片段的方法。

目前,我正在使用如下逻辑:

doc.elements.each('//include') do |element|
  handleInclude( element )
end

def handleInclude( element )      
  if filename = element.attributes['file']
    data = File.open( filename ).read
    doc = REXML::Document.new( data )
    element.parent.replace_child( element, doc.root )
  end
end

我的XML如下所示:

<include file="test.xml" />

但这看起来有点笨重,我担心REXML可能并不总是正确解析XML片段,因为在某些情况下缺少正确的根节点。有没有更好的方法呢?

1 个答案:

答案 0 :(得分:2)

目前,我已经找到了一种方法,通过创建一个人工根元素并进行一系列插入/删除来完成这项工作,如下所示:

  doc = REXML::Document.new( "<include>#{data}</include>" )
  previous_element = element
  doc.root.elements.each do |child|
    element.parent.insert_after( previous_element, child )
    previous_element = child
  end
  element.parent.delete( element )

这让我觉得必须有更好的方法。