Содержимое внутри тегов <ph>
было закодировано для сохранения зарезервированных символов <
и >
.
. Чистый способ справиться с этим - позволить Nokogiri преобразовать эти фрагменты обратно в XML.:
require 'nokogiri'
doc = Nokogiri::XML('<seg>Trennmesser <ph><I.FIGREF ITEM="3" FORMAT="PARENTHESIS"></ph><bpt i="1"><I.FIGTARGET TARGET="CIADDAJA"></bpt><ept i="1"></I.FIGREF></ept></seg>')
ph = Nokogiri::XML::DocumentFragment.parse(doc.at('seg ph').content)
puts ph.to_xml
, который выводит следующий узел, показывая, что Нокогири правильно воссоздал этот фрагмент:
<I.FIGREF ITEM="3" FORMAT="PARENTHESIS"/>
Для извлечения текста внутри тега <seg>
:
doc.at('//seg/text()').text
=> "Trennmesser "
При работе с HTML или XML никогда не стоит предполагать, что регулярное выражение будет лучшим путем для извлечения чего-либо.И HTML, и XML слишком нерегулярны и «гибки» (где «гибкость» означает, что она часто раздражающе искажена или определена совершенно уникальными и неожиданными способами.
Чтобы получить полный контент внутри тега <seg>
во втором вопросе:
require 'nokogiri'
doc = Nokogiri::XML('<seg>Hilfsmittel <ph><F34@Z7@Lge></ph>X <ph><F0></ph>= 0,5mm zwischen Beschleunigerwalze <ph><F34@Z7@Lge></ph>D<ph><F0></ph> und Trennmesser schieben.</seg>')
seg = Nokogiri::XML::DocumentFragment.parse(doc.at('seg').content)
puts seg.content
Какие выходы:
Hilfsmittel @Z7@Lge>X = 0,5mm zwischen Beschleunigerwalze @Z7@Lge>D und Trennmesser schieben.