Я пишу простой синтаксический анализатор RSS (я знаю, что многие уже написаны), и я наткнулся на проблему. Скажем, у меня есть следующий RSS канал:Регулярное выражение для соответствия только прямой subtag?
<channel>
<title>Sunset Boulevard</title>
<link>http://www.imdb.com/title/tt0043014/</link>
<description>A hack screenwriter writes a screenplay..</description>
<language>English</language>
<item>
<rating>8.6</rating>
</item>
</channel>
У меня есть метод, который с помощью данного тега и субтегов извлекает их в простой хэш. Вот мой «метод»:
def extract_text_from_tag(text, tag)
text =~ /<#{tag}.*?>(?<tag_text>.*?)<\/#{tag}>/m ? $~[:tag_text] : ''
end
Для разбора канала, я сначала извлечь его текст, а затем, используя массив предопределенных тегов (название, ссылки и т.д.), я достаю свои данные. Тем не менее, я хочу, чтобы мое регулярное выражение соответствовало только прямым дочерним элементам моего тега.
Например, если я передаю теги 'title', 'link', 'description', 'language' и 'rating', я хочу сопоставить их все, кроме 'rating' (потому что это дочерний элемент пункт).
Вот почему синтаксический анализ XML с помощью регулярных выражений. Возможно (для четко определенных случаев), но сложно. –
Требуется ли это делать с регулярными выражениями? решить это с помощью xpath или с помощью синтаксического анализа дома проще ... –
MichaelMyers - Я знаю, что это сложно, но формат четко определен. equinoxel - Да, это требование. – 2013-02-14 15:18:56