2015-03-31 2 views
-2

Мне нужно регулярное выражение, которое дает следующий XML, даст мне все продукты (продукты), которые имеют «Bebidas» как категорию (категорию), и я должен сделать это в Sublime Текст, поэтому только иметь возможность использовать регулярное выражение (без выделенного XML-парсера не допускается):xml Regex, сопоставляющий весь XML-файл

XML File www.ethgf.com/electricos.xml

у меня есть проблема, когда я использую (?s)<producto>(.+?Bebidas.+?)<\/producto>, потому что он выделяет почти весь XML (первый " producto 'через последнее закрытие тега).

+5

http://stackoverflow.com/questions/701166/can-you-p rovide-some-examples-of-why-it-is-hard-to-parse-xml-and-html-with-a-reg? rq = 1 –

+1

теперь у вас есть 2 проблемы –

+0

Почему бы вам не использовать парсер вместо регулярного выражения? –

ответ

2

Поскольку речь идет о выборе целых <product> узлов, вы можете использовать следующее регулярное выражение:

(?s)<product>(?:\s*<(\w+)>[^<]*?<\/\1>\s*)*?\s*<category>Drinks<\/category>(?:\s*<(\w+)>[^<]*?<\/\2>\s*)*?\s*<\/product>

Он будет выделить все <product> узлов, которые содержат Напиток категорию, даже если узлы не являются последовавший строгий порядок:

enter image description here

+0

Проблема в том, что не все узлы имеют одинаковый порядок в записях, а также есть другие продукты с большим количеством узлов, содержащих другую информацию. – cbeltrangomez

+0

@cbeltrangomez: Я обновил ответ. Я думаю, что нет «сиротских» текстовых узлов где-то между теми, которые вы предоставили? Если таких слов нет, это должно сработать. –

+1

Это работает для меня в ST3, используя данные, представленные в вопросе. @cbeltrangomez Пожалуйста, напишите ** соответствующие ** примеры данных в вашем вопросе. Кто-то может написать ответ, чтобы соответствовать вашим данным, тогда вы вернетесь и скажете «* Это не мои данные, на самом деле это включает в себя это и это.» «Это называется перемещение голландских ворот и на этом сильно осуждается. Дайте [Минимальный полный рабочий пример] (http://stackoverflow.com/help/mcve) в своем вопросе, чтобы люди могли ответить на него как заданные, не полагаясь на дополнительные комментарии от вас. – MattDMo

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