2015-10-01 3 views
0

Разбор XML-документа с Ruby libXML я заметил странное поведение. При поиске некоторых элементов и обходе результата я возвращаю объект результата в результат.Ruby libXML Xpath find возвращает результат в результате

Вот пример XML

<?xml version="1.0" encoding="UTF-8"?> 
<main> 
    <projects> 
     <project id="1"> 
      <name>Project 1</name> 
      <van>Guus</van> 
     </project> 
     <project id="2"> 
      <name>Project 2</name> 
      <van>Guus</van> 
     </project> 
    </projects> 
</main> 

Синтаксический код (контроллер):

@projects = @xmlDoc.find('//project[@id]/name') 

Отображение его (вид):

<ul> 
<%= @projects.each do |pr| %> 
    <li><%= pr.first.content %></li> 
<% end %> 
</ul> 
<hr> 
<%= @projects.inspect%> 

Результаты в:

- Project 1 
- Project 2 
    #<LibXML::XML::XPath::Object:0x000008153182c0> 
------------------------------------------------------------------------ 
#<LibXML::XML::XPath::Object:0x000008153182c0> 

Как вы можете видеть, список содержит объект XPath self. Я преднамеренно отобразил его в виде списка маркеров и проверил после горизонтальной линии. Как вы можете видеть, последний элемент не имеет перед собой пули. Но откуда оно взялось? Я что-то упустил или это ошибка?

ответ

0

Возвращаемое значение для each - это сам объект результата. В вашем коде, так как вы используете = в строке <%= @projects.each do |pr| %>, вы распечатываете каждый из проектов как элемент списка (в блоке), , а затем печатаете возвращаемое значение от each.

Решение просто использовать <% ... %> (т.е. нет =):

<ul> 
<% @projects.each do |pr| %> 
    <li><%= pr.first.content %></li> 
<% end %> 
</ul> 
+0

O глупо меня! Как я мог упустить это? Благодаря! – GTeley

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

  • Нет связанных вопросов^_^