2015-12-16 81 views
0

我想從數組中創建一個XML文件。這是我的建設者代碼:Nokogiri西里爾語文本的XML生成器(windows 1251)

def buildXML(formattedText) 
    builder = Nokogiri::XML::Builder.new do |xml| 
     xml.products { 
      formattedText.each do |lineItem| 
       xml.item { 
        xml.articleNumber lineItem[0] 
        description = lineItem[1..(findIndexOnShtrih(lineItem)-1)].join(" ").force_encoding(Encoding::Windows_1251) 
        xml.description description 
        xml.shtrihCode lineItem.at(findIndexOnShtrih(lineItem)) 
       } 
      end 

     } 
    end 
end 

我的輸入是這樣的(它包含了第一個指數始終的文章編號,那麼從第二描述到N-3指數,N-2至N-1是量與第N指數包含的條形碼):

["047609", "СОК", "СВЕЖЕВЫЖАТЫЙ", "ТОМАТ", "200", "МЛ", "(фреш", "дня)", "1", "шт", "2400000032731"]["048504", "ВОДА", "ГАЗИРОВАННАЯ", "С", "НАТУРАЛЬНЫМ", "СИРОПОМ", "(200МЛ)", "1", "шт", "2400000032953"]["055794", "СОК", "СВЕЖЕВЫЖАТЫЙ", "В", "АССОРТИМЕНТЕ", "(200МЛ)", "1", "шт", "2400000036425"]["058270", "СОК", "СВЕЖЕВЫЖАТЫЙ", "КЛУБНИКА", "+ЯБЛОКО", "200", "МЛ", "(фреш", "дня)", "1", "шт", "2400000037149"] 

這導致了這樣的東西:

<articleNumber>055794</articleNumber> 
    <description>&#x421;&#x41E;&#x41A; &#x421;&#x412;&#x415;&#x416;&#x415;&#x412;&#x42B;&#x416;&#x410;&#x422;&#x42B;&#x419; &#x412; &#x410;&#x421;&#x421;&#x41E;&#x420;&#x422;&#x418;&#x41C;&#x415;&#x41D;&#x422;&#x415; (200&#x41C;&#x41B;) 1 &#x448;&#x442;</description> 
    <shtrihCode>2400000036425</shtrihCode> 
    </item> 
    <item> 
    <articleNumber>058270</articleNumber> 
    <description>&#x421;&#x41E;&#x41A; &#x421;&#x412;&#x415;&#x416;&#x415;&#x412;&#x42B;&#x416;&#x410;&#x422;&#x42B;&#x419; &#x41A;&#x41B;&#x423;&#x411;&#x41D;&#x418;&#x41A;&#x410; +&#x42F;&#x411;&#x41B;&#x41E;&#x41A;&#x41E; 200 &#x41C;&#x41B; (&#x444;&#x440;&#x435;&#x448; &#x434;&#x43D;&#x44F;) 1 &#x448;&#x442;</description> 
    <shtrihCode>2400000037149</shtrihCode> 
    </item> 
</products> 

基本上,我想在XML描述以顯示正確的西裏爾字母。

我可以以某種方式強制生成器使用特定的編碼嗎?我發現了很多關於如何使用某種編碼打開XML文件的材料,例如使用Nokogiri::XML(a, nil, "UTF-8"),但沒有介紹如何構建有效的XML。

令人驚訝的是,如果我省略了我的文本上的代碼塊,那麼顯示我的文本就好了。

+0

歡迎堆棧溢出。請提供最少的輸入數據和預期的輸出。這有助於我們爲您提供幫助,併爲正在尋找類似答案的其他人提供一個關於您的代碼如何適合其用例的想法。 –

+0

另外,在Ruby中,方法和變量都是用snake_case寫的,而不是camelCase。它的_a_matter_of_readability和CodeStyleInThe社區。 –

+0

你真的想要force_encoding而不是編碼嗎? –

回答

0

後試圖發現這個職位小時 - How do I encode/decode HTML entities in Ruby?

您需要根據這個表做解碼等值&#x421;http://webdesign.about.com/od/localization/l/blhtmlcodes-ru.htm

CGI並沒有幫助我,但沒有ヶ輛。

這是現在我的工作代碼:

require 'htmlentities' 
puts HTMLEntities.new.decode(buildXML(cleansedArray).to_xml) 

最後所需的輸出:

<item> 
    <articleNumber>055794</articleNumber> 
    <description>СОК СВЕЖЕВЫЖАТЫЙ В АССОРТИМЕНТЕ (200МЛ) 1 шт</description> 
    <shtrihCode>2400000036425</shtrihCode> 
    </item> 
    <item> 
    <articleNumber>058270</articleNumber> 
    <description>СОК СВЕЖЕВЫЖАТЫЙ КЛУБНИКА +ЯБЛОКО 200 МЛ (фреш дня) 1 шт</description> 
    <shtrihCode>2400000037149</shtrihCode> 
    </item> 
</products>