1

我目前正在使用 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 片段。有没有更好的方法来做到这一点?

4

1 回答 1

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 )

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

于 2010-05-25T06:38:07.547 回答