2010-05-25 68 views
1

我目前使用REXML解析XML文件并试图想出一种从内部文件插入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片段。有没有更好的方法来做到这一点?

回答

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) 

这让我感觉必须有一个更好的方法。

+0

你必须使用红宝石吗? java或C#会工作吗? – 2010-05-25 07:02:43