2013-10-20 17 views
1

夥計們,引入nokogiri :: XML ::卡片閱讀機#編碼給 「無」

有下面的代碼段上引入nokogiri運行1.5.6

require 'nokogiri' 

reader = Nokogiri::XML::Reader(<<-eoxml) 
<?xml version="1.0" encoding="ISO-8859-1"?> 
<root> 
<node label="Session">    
    <node id="session_query1" label="DTM Buffer Size" /> 
    <node id="session_query2" label="Buffer Block Size"/> 
    <node id="session_query3" label="Enable Test Load"/> 
</node> 
<node label="Workflow" > 
<node id="workflow_query1" label="Enable HA Recovery"/> 
<node id="workflow_query2" label="Suspend on Error"/> 
</node> 
<node label="Mapping" > 
<node id="mapping_query1" label="SQL Override in SQ " /> 
<node id="mapping_query2" label="SQL Override in lookup" />    
</node> 
</root> 
eoxml 

p reader.instance_of? Nokogiri::XML::Reader #true 
p reader.xml_encoding #nil 

有誰知道爲什麼xml_encoding將返回「無「?

+0

試試這個'reader.respond_to(?:xml_e ncoding,true)#=> false' ..但是,我不知道爲什麼'reader.encoding#=> nil'可能是他們改變了API。 –

+0

我自己在[GitHub]中提出了一個問題(https://github.com/sparklemotion/nokogiri/issues/980#issuecomment-26673638)..讓我們等待.. :) –

回答

0

看代碼,這是nil,因爲你通過它nil

def Reader string_or_io, url = nil, encoding = nil, options = ParseOptions::STRICT 
    # ... 
end 

我想這是由於Reader是一個基於事件的解析器,它不會總是提供給信息它,所以它需要它通過

Document基於解析有它:

require 'nokogiri' 

p Nokogiri::VERSION 

doc = Nokogiri::XML(<<-eoxml) 
<?xml version="1.0" encoding="ISO-8859-1"?> 
<root> 
<node label="Session">    
    <node id="session_query1" label="DTM Buffer Size" /> 
    <node id="session_query2" label="Buffer Block Size"/> 
    <node id="session_query3" label="Enable Test Load"/> 
</node> 
<node label="Workflow" > 
<node id="workflow_query1" label="Enable HA Recovery"/> 
<node id="workflow_query2" label="Suspend on Error"/> 
</node> 
<node label="Mapping" > 
<node id="mapping_query1" label="SQL Override in SQ " /> 
<node id="mapping_query2" label="SQL Override in lookup" />    
</node> 
</root> 
eoxml 

p doc.encoding 
+0

感謝您的回覆。也許修改構造函數以通過第一個節點並初始化_encoding_變量將解決此問題。 – JunaidKirkire