Разбор на xml документ с тагове ‹% %› в ruby

Търся начин да анализирам xml/html документ в ruby, който съдържа тагове в стил ERB <% %> с ruby ​​код вътре. REXML, вграденият XML анализатор не ми позволява да направя това.

Наясно съм, че може да мога с библиотека на трета страна като hpricot, но бих искал да избегна всякакви външни зависимости.

Има ли начин да накарам REXML да бъде по-малко стриктен към етикетите? или да го накарам да разпознае този етикет? Някакво друго решение?


person cloudhead    schedule 03.07.2009    source източник
comment
Искате ли кодът да бъде изпълнен и изходът му да бъде интерполиран в XML, като .html.erb файл? Или искате действителното съдържание (самия код) на възела да бъде върнато?   -  person jason    schedule 03.07.2009
comment
Искам действителния изходен код. Реших, че мога просто да направя gsub(‹%, ‹ruby›).gsub(%›,‹/ruby›), но вграден метод би бил страхотен.   -  person cloudhead    schedule 03.07.2009


Отговори (1)


Е, при условие, че искате самия код на Ruby, вашият проблем не е с анализатора, а с факта, че вашият XML е деформиран.

Все още предполагам, че вашият XML изглежда нещо подобно:

<parent>
    <node>
         <% some code here! %>
    </node>
</parent>

Ако това наистина е така, съдържанието на възела node (heh) всъщност трябва да бъде раздел CDATA. Така че трябва да изглежда така:

<node><![CDATA[
     <% some code here! %>
]]></node>

Ако направите това, REXML ще може правилно да анализира XML файла и да върне съдържанието на node, което ще включи erb таговете.

Ако нямате контрол върху генерирането на XML, бихте могли, като временна корекция, просто (ако приемем, че всеки даден възел, който съдържа ERB само съдържа ERB) да направите търсене в целия файл и заменете за етикетите за начален и краен код и по подходящ начин добавете/предварете маркирането на CDATA. Можете лесно да автоматизирате това на избрания от вас език, има много примери тук в SO.

person jason    schedule 03.07.2009