редактирование существующего файла XML #555707


#0 by Stilet
Всем привет! Подскажите коллеги, как проще решить одну задачу. Есть некий файл XML. Требуется менять значение тегов и атрибутов, не меняя структуры. Первым делом я подумал про ТекстовыйДокумент - но уж больно неудобно им редактировать - легко ошибиться при поиске нужного тега. А ЧтениеXML не подходит из-за того, что им не модифицируешь файл. Я подумал может ЧтениемXML найти нужный тег и передать номер строки в текстовый документ, чтобы отредактировать, но что то не смог найти такого способа. Может кто нибудь сталкивался с элегантным и быстрым решением подобной задачи?
#1 by Ненавижу 1С
Чтение+Запись не предлагать?
#2 by Defender aka LINN
Только через текст. Для удобства/скорости можно регулярные выражения поюзать.
#3 by Tapo4ek
Делаем чтениеХМЛ, при чтении пишем копию и в процессе модифицируем.
#4 by Defender aka LINN
, Суровые вы :)
#5 by Stilet
Чтение и запись XML ? Если они позволят быстро и красиво сделать - то почему бы и нет. Я только не понимаю как. ЗаписьХМЛ создает полностью новый файл, стирая содержимое шаблона
#6 by Stilet
при большом объеме файла (да и теги постоянно повторяются) очень уж геморно... Сейчас подумаю насчет регеспов.. но тоже там куча засад. например там есть тег id - так его ОЧЕНЬ много везде )
#7 by Tapo4ek
Сначала писать во временный, потом в конце обработчика первый удалить, второй записать с именем первого. В этом вопрос?
#8 by Stilet
Хотелось бы встроенными средствами 1С, но вот уже начинаю думать о внешних библиотеках...
#9 by Stilet
сейчас обдумываю... что то непонятно если честно..
#10 by Stilet
а откуда этот временный взять? что то непонимаю.
#11 by Tapo4ek
А елки, че гоню-то, не надо никаких временных, просто в файл с которого читал - туда и пишешь)))
#12 by Stilet
А как понять в какую строку? Ну нашел я нужный тег в ЧтениеXML... а как понять в какой строке он, чтобы вызвать метод ЗаменитьСтроку(<НомерСтроки>, <Строка>)
#13 by artbear
Файл большой? Если не слишком, можно попробовать загрузить в дерево и уже с деревом работать.
#14 by Stilet
ну гдето до 1 мегабайта.. а так большой достаточно.
#15 by Stilet
#16 by Stilet
небольшой пример вверху. Самое неприятно, что есть несколько тегов <category> , а в них id
#17 by MM
Посмотри описание модели DOM. ДокументDOM можно прочитать из документа XML,  исправить, а потом записать в документ XML. Недостаток весь файл будет храниться в ОЗУ в процессе обработки.
#18 by Stilet
спасибо сейчас посмотрю.. Но мне еще одна мысли пришла в голову. Создать ЧтениеXML и ЗаписьXML. Первым читаю теги, а вторым создаю точно такой же файл, только с другим именем на диске и с другими значениями тегов.
#19 by Stilet
Не. ДокументDOM  это то что нужно. Памяти хватит. Спасибо MM!
#20 by AaNnDdRrEeYy
как вариант Объект XDTO прочитать в него изменить поля и записать в новый файл, если схема файла есть.
#21 by Stilet
нет схемы нет.. и получаемый файл может быть разным. Сейчас работаю над ДокументDOM
#22 by AaNnDdRrEeYy
схема как раз таки и описывает все возможные варианты содержимого файла. в файле есть простанство имен <shop xmlns:xlink="http://www.w3.org/1999/xlink"> значит у тех кто этот файл создает схема есть.
#23 by Stilet
ну вот уже столкнулся с непонятками. Я раньше с этим объектом не работал, поэтому наверняка где то туплю. написал код простейший: результирующий файл отличается от входного. Входной наверху я привел, а результирующий: ниже брошу для того, чтобы понятнее было
#24 by Stilet
#25 by Stilet
нет начала тегов  <id/>, <id_parent/> ,<level_depth/> и т.д
#26 by Stilet
только окончания. подскажите пожалуйста где моя ошибка - там пару строк кода всего.
#27 by MM
Элементы <id/>, <id_parent/> ,<level_depth/> просто записались в сокращённой форме, в общем случае парсер, который его будет читать, должен сработать правильно.
#28 by Stilet
а какие нибудь метода или свойства есть, чтобы в полной форме записалось?
#29 by MM
Вряд ли. Слеш в конце элемента означает, что внутри элемента пусто, в этом случае начинающий и замыкающий теги объединяются. Меня в этих документах больше смутило то, что prestashop != shop.
#30 by Stilet
Я просто другой шаблон взял.. это не страшно )
#31 by Stilet
Все же 1С такая 1С. Без выбрыконов не может <id>6</id> <id_parent>2</id_parent> записывает не как строка, а как прости меня Господи числа. Даже наименование пишет без кавычек. Хотя передаю ему именно как строку - <id>6</id> = "6" Минеральные масла = "Минеральные масла" Подскажите почему кавычки не ставит?
#32 by AaNnDdRrEeYy
В строках не должно быть кавычек. до даты доберешся она вообще будет записана как 2011-06-20
#33 by MM
Почему сразу 1С виновата, DOM-парсер, вроде как, Майкрософтовский, ну или свободный, платформа оболочка над ним. Данные о типе элемента должны храниться схеме XML. А для кавычек в XML выделен спецсимвол &amp , в который парсер сам преобразует кавычки из переданного текста.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С