2011-12-16 2 views
2

Я разбираю файл document.xml с помощью Nokogiri, извлеченный из файла .docx, и вам нужно получить значения атрибутов с именами, например «w:val».Получите значения атрибутов с пространством имен, используя Nokogiri

Это образец исходного XML:

<w:document> 
    <w:body> 
    <w:p w:rsidR="004D5F21" w:rsidRPr="00820E0B" w:rsidRDefault="00301D39" pcut:cut="true"> 
     <w:pPr> 
     <w:jc w:val="center"/> 
     </w:pPr> 
    </w:body> 
</w:document> 

Это образец кода:

require 'nokogiri' 

doc = Nokogiri::XML(File.open(path)) 
    doc.search('//w:jc').each do |n| 
    puts n['//w:val'] 
    end 

Там нет ничего в консоли, только пустые строки. Как я могу получить значения атрибутов?

ответ

3

В документе отсутствует его объявление пространства имен, и Nokogiri не является доволен им. Если проверить метод errors для doc, вы увидите что-то вроде:

 
puts doc.errors 
Namespace prefix w on document is not defined 
Namespace prefix w on body is not defined 
Namespace prefix w for rsidR on p is not defined 
Namespace prefix w for rsidRPr on p is not defined 
Namespace prefix w for rsidRDefault on p is not defined 
Namespace prefix pcut for cut on p is not defined 
Namespace prefix w on p is not defined 
Namespace prefix w on pPr is not defined 
Namespace prefix w for val on jc is not defined 
Namespace prefix w on jc is not defined 
Opening and ending tag mismatch: p line 3 and body 
Opening and ending tag mismatch: body line 2 and document 
Premature end of data in tag document line 1 

С помощью CSS аксессоров Nokogiri, а не XPath, вы можете шаг вокруг проблем пространства имен: выход

puts doc.at('jc')['val'] 

воли :

center 

Если вам нужно перебрать нескольких jc узлов, используйте search или один из его aliase или аналогичные методы, аналогичные тем, что вы делали раньше.

+0

«В документе отсутствует его декларация пространства имен». Я новичок в Нокогири, вы можете мне сказать, почему? – avy

+0

Я не знаю, почему пространство имен XML отсутствует. Возможно, пример XML не является полным или неправильно скопирован. Возможно, XML имеет неправильный формат, когда он сгенерирован. –

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