2010-05-25 73 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