У меня есть строка, которая выглядит следующим образом:Разобрать строку с несколькими XML-подобные тегами, используя рубин
string = " <SET-TOPIC>INITIATE</SET-TOPIC>
<SETPROFILE>
<PROFILE-KEY>predicates_live</PROFILE-KEY>
<PROFILE-VALUE>yes</PROFILE-VALUE>
</SETPROFILE>
<think>
<set><name>first_time_initiate</name>yes</set>
</think>
<SETPROFILE>
<PROFILE-KEY>first_time_initiate</PROFILE-KEY>
<PROFILE-VALUE>YES</PROFILE-VALUE>
</SETPROFILE>"
Моей цель состоит в том, чтобы иметь возможность считывать каждый верхний уровень, который находится в шапках с разбором , Я использую оператор case
, чтобы оценить, что такое ключ верхнего уровня, например <SETPROFILE>
, но может быть много разных значений, а затем запустить метод, который выполняет разные действия с помощью тегов.
Что это означает, что мне нужно, чтобы иметь возможность очень легко узнать:
top_level_keys = ['SET-TOPIC', 'SET-PROFILE', 'SET-PROFILE']
- , когда я прохожу в ключе знать полную стоимость
parsed[0].value = {:PROFILE-KEY => predicates_live, :PROFILE-VALUE => yes}
parsed[0].key = ['SET-TOPIC']
В настоящее время я разбираю всю строку следующим образом:
doc = Nokogiri::XML::DocumentFragment.parse(string)
parsed = doc.search('*').each_with_object({}){ |n, h|
h[n.name] = n.text
}
В результате я разбираю и знаю только второй тег. Значения из первого тега не отображаются в переменной parsed
.
У меня есть контроль над тегами, если это помогает.
Но мне нужно иметь возможность анализировать и знать содержимое обоих тегов в результате анализа, потому что мне нужно применить метод для каждого экземпляра узла.
Примечание: строка также содержит только обычный текст, как до, так и после XML-подобных тегов.
Спасибо. Если мы удалим переопределение и создадим массив, это будет нормально. Есть ли недостаток или торговля таким образом? – Angela
Моя цель - иметь способ, который может анализировать каждый отдельный тег и применять метод. Затем различные узлы принимают разобранные значения, применяют соответствующий метод, затем вычеркивают тег из строки или заменяют его на основе метода. – Angela
Я получаю сообщение об ошибке: 'TypeError: no implicit conversion of Symbol into Integer' мы превращаем хэш в массив? – Angela