Допустим есть хмл: HTML: <data> <cont1></cont1> <cont2>qwerty</cont2> <cont3/> <fields> <fileld> <row1></row1> <row2/> <row3>12345</row3> </fileld> <field> <row1></row1> <row2/> <row3></row3> </field> </fields> </data> нужно удалить все пустые теги в хмл, т.е. чтоб получилось HTML: <data> <cont2>qwerty</cont2> <fields> <fileld> <row3>12345</row3> </fileld> </fields> </data> Как это сделать? Помогите! Все форумы уже облазил....
Если через DOM, то там во время загрузки и сохранения можно использовать флаг LIBXML_NOEMPTYTAG http://php.net/manual/en/domdocument.load.html http://php.net/manual/en/domdocument.save.html http://php.net/manual/en/domdocument.loadxml.html http://php.net/manual/en/domdocument.savexml.html
О! Удалило все <tag/> Как такое же сделать для <tag></tag>?? Заранее благодарен! И где можно про регулярки почитать? Что означает #, \w, =, |, \1 где это почитать доступно, для нубов?
Тут http://ru.php.net/manual/en/book.pcre.php # - это ограничители... могут быть любые, обычно это / ... /, но поскольку внутри регекспа есть / - нужно или эскейпить каждый внутри \/, или взять другой ограничитель. http://ru.php.net/manual/en/regexp.refe ... miters.php \w - специальная эскейп последовательность http://ru.php.net/manual/en/regexp.reference.escape.php + - модификатор повтора (в данном случае - один и более символ) http://ru.php.net/manual/en/regexp.refe ... tition.php | - альтернативный вариант http://ru.php.net/manual/en/regexp.refe ... nation.php \1 - ссылка на подшаблон http://ru.php.net/manual/en/regexp.refe ... rences.php По идее эта регулярка должна удалять и <tag></tag> но только если нет пробелов, с пробелами нужно как-то так #<(\w+)(/>|[\s\n\r\t]*</\1>)#
Регулярка здесь не подходит. Регулярные выражения не способны отслеживать вложенность тегов. Если бы не было вложенности все решалось бы элементарно просто: PHP: $str = preg_replace('/<\w+\/>/s', "", $str); $str = preg_replace('/<([^>]*)><\/\\1>/s', "", $str);
Цикл в таких вещах жуткий костыль. Тут примерчик приведен детсадовский. Я посмотрю на ваш цикл в многомегабайтном файле с хотябы 10-кратной вложенностью тегов. Это во-первых. Во-вторых, тот цикл, что приведен, никуда не годиться: нету условия выхода из цикла.
> Я посмотрю на ваш цикл в многомегабайтном файле с хотябы 10-кратной вложенностью тегов. Посмотрите. Не умничайте, а возьмите и посмотрите все способы с бенчмарками как по скорости, так и по потребляемой памяти. > Во-вторых, тот цикл, что приведен, никуда не годиться: нету условия выхода из цикла. А я кому-то обязан разжевывать и в рот класть?
Давно уже просмотрено и изучено. Хотя бы для себя сперва разжуйте. То, что цикл будет отрабатываться один лишний раз, это ж не проблема, бенчмарк это ж не заметит).