2016-01-31 3 views
-3

Мой текстовый файл как:nokogiri как извлечь часть поля

<first>1</first><Name>wangli</Name><birthday>19860105</birthday><address>Here</address> 
<first>2</first><Name>zhangli</Name><birthday>19870105</birthday><address>Sangdu</address> 
<first>3</first><Name>lili</Name><birthday>19880105</birthday><address>Hongkong</address> 
<first>4</first><Name>liuli</Name><birthday>19860515</birthday><address>London</address> 

Я хочу создать новый файл с рубинового самоцвета nokogiri нравится:

wangli-Here 
zhangli-Sangdu 
lili-Hongkong 
liuli-London 

Я использовал:

require 'nokogiri' 
doc = Nokogiri::XML(File.open("file"),nil,"gbk") 
puts doc.xpath("/name") + doc.xpath("/address") 

не может работать

+0

Проверить Nokogiri шпаргалка: https://github.com/sparklemotion/nokogiri/wiki/Cheat-sheet –

+0

Добро пожаловать в Stack Overflow. Читайте «[ask]», «[mcve]» и http://meta.stackoverflow.com/q/261592/128421. Ваш код не показывает ваши усилия и выглядит как небольшая попытка в надежде, что мы заполним пробелы. –

+0

Является ли ваш текстовый файл фактически XML-документом, или это действительно серия фрагментов XML? Если это второе, как это получилось? –

ответ

0

Поскольку каждая строка вашего входного XML содержит фрагмент XML, вы должны обрабатывать каждую линию один за другим. Кроме того, вам нужно использовать Nokogiri::XML.fragment для разбора каждой строки. Здесь работает пример:

require "nokogiri" 

output = File.open("output.txt", "w") 

File.open("input.xml", "r") do |f| 
    f.each_line do |line| 
     frag = Nokogiri::XML.fragment(line) 
     output.puts "#{frag.search('Name').text}=#{frag.search('address').text}" 
    end 
end 

output.close 
+0

Спасибо, много. Но как я могу получить Name.language GBK? – Syutran

+0

@Syutran Я не уверен, что означает 'Name.langauge', а что такое' GBK' –

0

Похоже, что p Решение проблемы! изменить текстовый файл:

<doc> 
<line><first>1</first><Name>wangli</Name><birthday>19860105</birthday><address>Here</address></line> 
<line><first>2</first><Name>zhangli</Name><birthday>19870105</birthday><address>Sangdu</address></line> 
<line><first>3</first><Name>lili</Name><birthday>19880105</birthday><address>Hongkong</address></line> 
<line><first>4</first><Name>liuli</Name><birthday>19860515</birthday><address>London</address></line> 
</doc> 

, а затем код рубинового

require 'nokogiri' 
doc = Nokogiri::XML(File.open("27065"),nil,"gbk") 
doc.xpath("//line").each do |line| 
    l.xpath("./name").text + "-" + line.xpath("./address").text 
end 
+0

Нет необходимости изменять файл вообще. Лучший вопрос - почему файл структурирован таким образом; Это недействительный XML. –

Смежные вопросы