2014-04-03 59 views
0

我正在嘗試讀取XML文件(configs.xml)的內容並將其插入到另一個XML文件(workspace.xml)中間的某個位置。來自XML代碼的尖括號用HTML代碼代替?

這是代碼:

require "nokogiri" 

workspace = File.open("workspace.xml") 
xml = Nokogiri::XML(workspace) 
workspace.close 

# Add new configs 
configs = File.read("configs.xml") 
xml.search('component[name="RunManager"]').each do |node| 
    node.content=configs 
end 

puts xml 

輸出看起來是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<project version="4"> 
    <component name="AndroidLayoutPreviewToolWindow"> 
    <option name="state"> 
     <GlobalState/> 
    </option> 
    </component> 
    <component name="RunManager" selected="Android Application.Run on device">  
    &lt;configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests"&gt; 
     &lt;module name="" /&gt; 
     &lt;option name="TESTING_TYPE" value="0" /&gt; 
     &lt;option name="INSTRUMENTATION_RUNNER_CLASS" value="" /&gt; 
     &lt;option name="METHOD_NAME" value="" /&gt; 
     &lt;option name="CLASS_NAME" value="" /&gt;   
    &lt;/configuration&gt; 
</component> 
    <component name="ShelveChangesManager" show_recycled="false"/> 
    <component name="SliceManager" selected="Android Application.Run on device"> 
    <option name="analysisUIOptions"> 
     <AnalysisUIOptions/> 
    </option> 
    </component> 
</project> 

正如你所看到的,在中間插入的內容與HTML代碼&lt; &gt全部換成角括號< > ,我不知道爲什麼,儘管我懷疑這必須用編碼做些什麼。

什麼是最有趣的是,如果(也被插入和修改的一個)只用於打印的configs.xml內容則如預期輸出:

<configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests"> 
     <option name="TESTING_TYPE" value="0" /> 
     <option name="INSTRUMENTATION_RUNNER_CLASS" value="" /> 
     <option name="METHOD_NAME" value="" /> 
     // ............ 
</configuration> 

回答

1

當您設置一個節點,你的內容實際上設置其文字的內容,意思是,Nokogiri會自動轉義它。

要將節點添加到您的XML,您需要使用add_child

configs = File.read("configs.xml") 
xml.search('component[name="RunManager"]').each do |node| 
    node.add_child configs 
end