2010-03-25 2 views
0

Я застрял с чем-то довольно простым, но очень раздражающим: У меня есть xml-файл с одним узлом, где контент включает в себя разрывы строк и whitspaces. К сожалению, я не могу изменить xml.Rails - strip xml import from whitespace и break line

<?xml version="1.0" encoding="utf-8" ?> 
<ProductFeed> 

ACME ООО Fooproduct Foo Root :: Bar Категория

добраться до узла и может считывать с него без проблем:

url = "http://feeds.somefeed/feed.xml.gz" 
@source = open((url), :http_basic_authentication=>["USER", "PW"]) 
@gz = Zlib::GzipReader.new(@source) 
@result = @gz.read 
@doc = Nokogiri::XML(@result) 
@doc.xpath("/ProductFeed/Vendors/Vendor").each do |manuf| 
vendor = manuf.css("Name").first.text 
manuf.xpath("//child::Product").each do |product| 

    product_name = product.css("Name").text 
    foocat = product.css("Category").text 

    puts "#{vendor} ---- #{product_name} ---- #{foocat} " 
end 
end 

Это приводит к :

ACME Ltd. ---- Fooproduct ---- 
             Foo Root :: Bar Category 

Очевидно, что в строке, возвращаемой product.css ("Category"), есть разрывы строк и табуляции или пробелы.

Кто-нибудь знает, как убрать результат от разломов и кранов или пробелов прямо здесь?

В качестве альтернативы я мог бы сделать это в следующем шаге, где я делаю находку на «foocat» как

barcat = Category.find_by_foocat(foocat) 

Спасибо за помощь!

Val

ответ

0

Вы могли use XSLT, чтобы удалить все ненужные символы.

+0

Hi Santiiii, спасибо за идею! Раньше я не использовал xslt, и он отлично смотрелся и работал для тестирования. Для полноты: на самом деле я набрал «.text» .strip 'на нужный узел. cat = (product.css («Категория»). Текст) .strip Причина в том, что моя конкретная настройка с nokogiri упростила этот путь. –

+0

Я рад, что это сработало. С уважением –