() Приведенный ниже код, действительно, лучше. Оставив в покое блок сохранения строки в ХМЛ, можно выделить четыре возможных сценария работы со значением вхСтрока.
Варианты <elem> и запятушки
Первые два (0) и (8) малополезны. Разница только в том, что в варианте (8) мы получаем многострочный текст, а в варианте (0), текст "склеен" в одну строку. При этом с точки зрения скорости вариант (8) лучше. О результате: ХМЛ редактор покажет нам в итоге дерево <elem>, в котором в качестве значения текста будут выступать примитывные типы данных, разделенных запятыми. Как в этом случае документировать структуру описания формы неясно.
Вариант <elem> как папка <data> как файл (попытка 1)
Используя следующий код мы можем разделить каждый элемент описания метаданных в отдельный тэг.
Код |
---|
// Пусть каждая запятая - это признак окончания данных
// Пусть скобки { и } признаки папки данных
// Каждую запятую превращаем в признак конца предыдущего данного - <\data>
// и признак начала следующего данного <data>
выхХМЛТело = СтрЗаменить(вхСтрока,",","</data><data>");
// Каждая начало блока превращаем в признак начала элемента
// и последующим началом блока данных
выхХМЛТело = СтрЗаменить(выхХМЛТело,"{","<elem><data>");
// Каждое завершение блока требует признака завершения блока данных
// и последующим завершением элемента
выхХМЛТело = СтрЗаменить(выхХМЛТело,"}","</data></elem>");
Показать полностью |
Но при этом получается некрасивая картина в плане того, что каждый <elem> оказывается вложенным в <data> ж-)
Вариант <elem> как папка <data> как файл (окончательный вариант)
Лишь в случае, описанном ниже мы получаем то, что нужно - <elem> как папка, <data> как файл
Код |
---|
//{ Получение одной длинной строки
выхХМЛТело = СтрЗаменить(вхСтрока,СИМВОЛЫ.ПС,"");
выхХМЛТело = СтрЗаменить(выхХМЛТело,СИМВОЛЫ.ВК,"");
//}
//{ Замена одинарных символов
выхХМЛТело = СтрЗаменить(выхХМЛТело,",","</data><data>");
выхХМЛТело = СтрЗаменить(выхХМЛТело,"{","<elem><data>");
выхХМЛТело = СтрЗаменить(выхХМЛТело,"}","</data></elem>");
//}
//{ Удаляем лишние блоки <data><elem> и </data></elem>
выхХМЛТело = СтрЗаменить(выхХМЛТело,"<data><elem>","<elem>");
выхХМЛТело = СтрЗаменить(выхХМЛТело,"</elem></data>","</elem>");
//}
Показать полностью |
Теперь мы можем при желании работать с полученными элементами как с объектами файловой системы.
Частично это ответ kosilov-у о практической пользе этого знания.
НО, прошу принять во внимание, то, что в своем первом ответе подсказал German.
Данный прием не дает 100 процентного правильного результата. У меня в HRM из 900 форм, 100 оказались некорректно разобранными. И это совершенно правильно, ибо
1. На данном этапе стоит задача документировать формат описания форм, а не создать парсер.
2. Теперь мы можем создать файл XML Schemа, который и будет окончательным документом о формате описания форм.
И уже после этого. Умные головы смогут, имея на руках, описание формата создать безошибочный сборщик-разборщик.