Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Изменение текста в XML / 4 сообщений из 4, страница 1 из 1
25.10.2015, 11:50
    #39085777
Klyaus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение текста в XML
День добрый, уважаемые форумчане!
Столкнулся с проблемой изменения xml(до этого дела с xml не имел)...
В принципе идея не нова, но найти решение я пока не смог(хотя уверен оно уже не раз здесь обсуждалось).
Дружу Access с сторонней прогой (если это имеет какое-то значение, то вот и вот )...и всё у меня вроде бы получилось и записи в базу этой проги идут на ура, но, как всегда затуп случился на довольно простом моменте
У проги этой есть файл settings.xml - в котором указывается среди прочего содержимое окна при открытии(думаю идея понятна - внёс данные в базу, хочу что б эти данные отобразились при открытии программы).

Данные указываются между тегами <session> </session>, то есть мне надо заменить весь текст между тегами .

Если есть необходимость, то вот выдержка(каждый <document></document> - это новая вкладка на экране(их может быть сколько угодно, но мне надо не более двух), <active>00HQ13800JrY</active> - это ID объекта на вкладке которого будет фокус при открытии )
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<session>
      <documents>
        <document>
          <type>doc-invoice</type>
          <object>00HQ13800JrY</object>
        </document>
        <document>
          <type>doc-price-ticket</type>
          <object>00HQ1380007U</object>
        </document>
      </documents>
      <active>00HQ13800JrY</active>
</session>



Пробую открывать xml как текст используя FileSystemObject, копирую в буфер всё содержимое,пытаюсь заменить и записать обратно в файл...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Dim FileName as String
Dim objFSO as FileSistemObject
Dim F, Buffer

FileName = "C:\Base\settings.xml"

Set objFSO = New FileSystemObject

Set F = objFSO.OpenTextFile(FileName, ForReading)
Buffer = F.ReadAll
F.Close

Buffer = Replace(CStr(Buffer), "<session> * </session>", "<session> сюда вставлю всё что нужно :-) </session>", 1, -1, 1) 'вот здесь меня и заклинило!

Set F = objFSO.OpenTextFile(FileName, ForWriting)
F.Write Buffer
F.Close



Уверен, что есть путь логичнее, поэтому пока ищу решение - прошу помощи.
...
Рейтинг: 0 / 0
25.10.2015, 15:15
    #39085823
Klyaus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение текста в XML
Mina Anna Mazzini,

Да я бы может и рад был бы разобраться с xml в подробностях, но сейчас совершенно не тот случай, когда надо знать полностью предметную область. И времени на разбор надо от нескольких дней до недель. И ведь по сути в твоих словах есть истина автор Mina Anna MazziniНо тебе-то нужна лишь заглушка, костылик...
А просить помощи я пришёл именно потому что не работает моя конструкция - не могу я додуматься как мне организовать вот таким образом автор Mina Anna Mazziniнашел бы открывающий тег, потом закрывающий, считал бы все до и все после, вставил между ними свое и записал
Чего-то я в обработке текстовых файлов недопонимаю...то есть я вижу что нужно нечто вроде SQL'ного
Код: sql
1.
Like "<session>" &"*"& "</session>"

но в конкретных условиях не могу реализовать (или знаний не хватает или мозгов :-))
...
Рейтинг: 0 / 0
26.10.2015, 08:11
    #39086356
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение текста в XML
...
Рейтинг: 0 / 0
26.10.2015, 09:55
    #39086429
Klyaus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение текста в XML
автор Agapov_stas Тут есть пару вариантов.
Вот спасибо! Добавил в закладки, на досуге разберу.

На данный момент решил таким образом
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim FileName as String
Dim objFSO as FileSistemObject
Dim F, Buffer
Dim txt as string

FileName = "C:\Base\settings.xml"

Set objFSO = New FileSystemObject

Set F = objFSO.OpenTextFile(FileName, ForReading)
Buffer = F.ReadAll
F.Close
txt = Mid(Buffer, InStr(Buffer, "<session>") + 9, (CInt(InStr(Buffer, "</session>")) - CInt(InStr(Buffer, "<session>")) - 9)) ' не пойму почему вчера не смог составить этот поиск

Buffer = Replace(CStr(Buffer), txt, " сюда вставлю всё что нужно!!! ", 1, -1, 1) 

Set F = objFSO.OpenTextFile(FileName, ForWriting)
F.Write Buffer
F.Close



Это полностью выполняет текущие задачи(просто подмена текста), сейчас сформирую строку для замены и проверю работает ли это на практике.

автор Mina Anna Mazziniне заморачивайся. Оставляй Replace, хоть он мне и не нравится совсем.

Ну заменим мы его на два Instr, что немногим лучше. Читать-то файл мы можем лишь с начала. Получив пойнтеры на откр-закр теги, все равно придется делать Skip чтобы концовку прочитать. Стоит игра свеч?

Я хотел было по строкам читать, но хорошо, что сам же и оговорился выше - расчитывать на концы строк - значит реализовать сугубо частный случай.

Все сугубо умозрительно. Пока никто предметно не отписался :)

ну без двух Instr (у меня пока вообще их 3...но это я поправлю) было никак не обойтись, потому как количество содержимого между тегами может различаться от 9 символов до > 1000...
вроде код очевидный, но почему-то вчера составить не вышло(наверное надо завязывать работать по выходным :-))

Благодарю за помощь-консультацию :-)!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Изменение текста в XML / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]