powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как изменить текст в XML
22 сообщений из 22, страница 1 из 1
Как изменить текст в XML
    #33391757
arinas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет! У меня следующий вопрос. Есть источник - база аксесс, оттуда таблица, методом экспорта, выгружается в файл xml, затем этот файл нужно преобразовать. Нужно поменять текст в корневом теге и вставить дополнительный тег группировки. Для наглядности привожу, что получается и что нужно...
Получается:

- <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2005-10-28T11:15:58"> ' ЭТО НУЖНО ЗАМЕНИТЬ НА СЕАНС- <Субъект> ' ЭТО НУЖНО ДОПОЛНИТЬ АТРИБУТАМИ
<Тип>Предп_орг</Тип> ' ЭТО НУЖНО ПЕРЕНЕСТИ В АТРИБУТЫ
<Код>111_0110</Код> ' И ЭТО НУЖНО ПЕРЕНЕСТИ В АТРИБУТЫ<Название>ОАО "ЛИПЕЦКОБЛБАНК", Г. ЛИПЕЦК</Название>
<ИНН>7606002866</ИНН>
</Субъект>

Нужно:

- <Сеанс>
- <Субъект Тип="Предп_орг" Код="111_0110">
<Название>ОАО "ЛИПЕЦКОБЛБАНК", Г. ЛИПЕЦК</Название>
<ИНН>4825004973</ИНН>
- <ГруппыОбъекта> ' ЭТО НУЖНО ДОБАВИТЬ
- <ГруппаОбъекта> ' ЭТО НУЖНО ДОБАВИТЬ
<Код>Клиент</Код> ' ЭТО НУЖНО ДОБАВИТЬ<Вид_кл>Ю</Вид_кл> ' ЭТО НУЖНО ДОБАВИТЬ<Банк>Д</Банк> ' ЭТО НУЖНО ДОБАВИТЬ
</ГруппаОбъекта> ' ЭТО НУЖНО ДОБАВИТЬ
</ГруппыОбъекта> ' ЭТО НУЖНО ДОБАВИТЬ</Субъект>

То есть, видимо, вопрос разбивается на два:
1) Как изменять текст в xml
2) Как вставить группировку
Помогите плиз :( Очень надо...
Заранее спасибо.
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #33391832
Билли
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #33392168
Fat Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Варианты решения:

1) Использовать преобразование XSL
2) Написать свою процедурку, которая берет данные из твоей таблицы и выводит их в обычный текстовый файл (тот самый XML).

В твоем случае вариант 2 мне кажеся предпочтительнее - он быстрее в разработке. С другой стороны, на будущее знать работу связки XML-XSL тоже не вредно.
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #33393332
arinas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решила двигаться по второму варианту. Экспортирую файл из Access2003 в UTF8, затем посредством OpenTextFile и ReadLine копирую построчно информацию в новый файл xml. Но! Возникла проблема с чтением строк. Там, где английские буквы все считывается замечательно, там же, где русские, считывает тарабарщину.
<?xml version="1.0" encoding="UTF-8" ?> 'НОРМАЛЬНО
- <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2005-11-22T16:33:08"> 'НОРМАЛЬНО
- <Субъект> 'А ВОТ ЗДЕСЬ <Субъект>
Что делать? Перелопатила весь инет в поисках ответа, нашла много функций, но ни одна не подошла :(
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #33393592
Fat Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть я невнятно выразился, но я имел ввиду вот что:

1) Делаешь запрос к своей исходной таблице, в который вытаскиваешь нужные тебе данные
2) Открываешь дисковый файл на запись- это будет твой итоговый файл XML
3) Пишешь в него заголовок XML-файла. В твоем случае это будет <Сеанс>
4) Бежишь в цикле по рекордсету и пишешь в в файл свои данные из запроса, плюс к этому то, что тебе надо дополнить
5) Пишешь в него </Сеанс>
6) Закрываешь файл и тащишся как удав по стекловате!

Ежели что не понятно-спрашивай.
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #33393598
Fat Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то в таком вот духе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Public Sub CreateXML()
Dim ff As Integer
Dim rs As DAO.Recordset

ff = FreeFile 'дескриптор файла
Set rs = CurrentDb.OpenRecordset("select * from tab1") 'твой запрос к исходной таблице
Open "G:\testXML.xml" For Output As #ff 'открываем файло
Print #ff, "<Сеанс>" 'пишем заголовок

While Not rs.EOF
Print #ff, "<Субъект Тип=" & Chr( 34 ) & "Предп_орг" & Chr( 34 ) & " Код = " & rs![Names] & ">"
'chr(34)- это кавычки
'бла-бла в том-же духе
Print #ff, "<ГруппыОбъекта>" 'то, что тебе надо добавить в XML-файл
Print #ff, "<ГруппаОбъекта>"
'бла-бла в том-же духе
Print #ff, "</Субъект>"
rs.MoveNext
Wend

Print #ff, "</Сеанс>"

Close #ff
rs.Close
Set rs = Nothing

End Sub

...
Рейтинг: 0 / 0
Как изменить текст в XML
    #33395860
arinas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fat Lamer! Ты просто супер!!! Спасибо тебе огромное! Вот где загвоздка то была! не нужно было городить выгрузку в xml, а потом его изменение, а сразу формировать необходимый файл из таблицы...Спасибо тебе еще раз!!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как изменить текст в XML
    #39557294
olang@tut.by
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fat Lamer,

доброе утро. сделал так как вы посоветовали автору сообщения, но почему то при открытие XML файла выдает ошибку
вот код программы экспорта
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
NameTXT = "K:\Excel\Sbut.xml"
Set dbs = CurrentDb()
 ' &#231;&#224;&#239;&#240;&#238;&#241; &#234; &#232;&#241;&#245;&#238;&#228;&#237;&#238;&#233; &#242;&#224;&#225;&#235;&#232;&#246;&#229; qSbutXml
strSQL = "SELECT tbOtgruzka.NomTTN, tbOtgruzka.Seriy, tbOtgruzka.DataO, tbKlient.GLN, tbKlient.Unn, tbKlient.Post, tbProd.GTIN, tbProd.prod, tbProd.marka," _
& " tbOtgruzka.NomPart , tbOtgruzka.DataPart FROM tbProd INNER JOIN (tbKlient INNER JOIN tbOtgruzka ON tbKlient.KodKl = tbOtgruzka.Klient)" _
& " ON tbProd.KodP = tbOtgruzka.Prod ORDER BY tbOtgruzka.DataO"
Set rs = dbs.OpenRecordset(strSQL, dbOpenDynaset, DB_CONSISTENT, dbPessimistic)
rs.MoveFirst
MsgBox "&#212;&#224;&#233;&#235; " & NameTXT & " &#241;&#238;&#245;&#240;&#224;&#237;&#229;&#237; &#226; &#239;&#224;&#239;&#234;&#243; K:\Excel", vbInformation, "&#194;&#205;&#200;&#204;&#192;&#205;&#200;&#197;"
Open NameTXT For Output As #1
'&#239;&#232;&#248;&#229;&#236; &#231;&#224;&#227;&#238;&#235;&#238;&#226;&#238;&#234;
Print #1, "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "UTF-8" & Chr(34) & "?>"
Print #1, "<ArrayOfItemTTN xmlns:xsi=" & Chr(34) & "http://www.w3.org/2001/XMLSchema-instance" & Chr(34) & " xmlns:xsd=" & Chr(34) & "http://www.w3.org/200l/XMLSchema" & Chr(34) & ">"
Print #1, "<IitemTTN>"
Print #1, "<TYPEOTR>2</TYPEOTR>"
        While Not rs.EOF
        ' rs.Fields(0) - &#237;&#238;&#236;&#229;&#240; &#210;&#210;&#205;;     rs.Fields(1) - &#241;&#229;&#240;&#232;&#255; &#210;&#210;&#205;;   rs.Fields(2) - &#228;&#224;&#242;&#224; &#238;&#242;&#227;&#240;&#243;&#231;&#234;&#232;;   rs.Fields(3) - GLN;                     rs.Fields(4) - &#211;&#205;&#205; &#239;&#238;&#235;&#243;&#247;&#224;&#242;&#229;&#235;&#255;;      rs.Fields(5) - &#239;&#238;&#235;&#243;&#247;&#224;&#242;&#229;&#235;&#252;
        ' rs.Fields(6) - Gtin;                  rs.Fields(7) - &#239;&#240;&#238;&#228;&#243;&#234;&#246;&#232;&#255;;  rs.Fields(8) - &#236;&#224;&#240;&#234;&#224;;                rs.Fields(9) - &#237;&#238;&#236;&#229;&#240; &#239;&#224;&#240;&#242;&#232;&#232;;      rs.Fields(10) - &#228;&#224;&#242;&#224; &#239;&#224;&#240;&#242;&#232;&#232;;
       
        Print #1, "<TTN>" & Trim(rs.Fields(0)) & Chr(58) & Trim(rs.Fields(1)) & Chr(58) & Format(rs.Fields(2), "dd\.mm\.yyyy") & "</TTN>"               'chr(34)- &#253;&#242;&#238; &#234;&#224;&#226;&#251;&#247;&#234;&#232;
        Print #1, "<POL>" & Trim(rs.Fields(3)) & Chr(58) & Trim(rs.Fields(4)) & Chr(58) & Trim(rs.Fields(5)) & "</POL>"            'Chr(58) - &#253;&#242;&#238; &#228;&#226;&#238;&#229;&#242;&#238;&#247;&#232;&#229;
        Print #1, "<OTPR>4810077900006:700049410:OAO " & Chr(34) & "&#204;&#206;&#198;&#197;&#203;&#200;&#210;" & Chr(34) & "</OTPR>"
        Print #1, "<ArrayOfTtnParam>"
        Print #1, "<PRODUCT>"
        Print #1, "<GTIN>" & rs.Fields(6) & "</GTIN>"
            If rs.Fields(8) = "" Then
                Print #1, "<NAME>" & rs.Fields(7) & "</NAME>"
            Else
                Print #1, "<NAME>" & rs.Fields(7) & " " & rs.Fields(8) & "</NAME>"
            End If
        Print #1, "<PART>" & rs.Fields(9) & Chr(58) & Format(rs.Fields(10), "dd\.mm\.yyyy") & Chr(58) & getGUID() & "</PART>"
        Print #1, "</PRODUCT>"
        Print #1, "</ArrayOfTtnParam>"
        Print #1, "<GUIN>" & getGUID() & "</GUIN>"
        rs.MoveNext
Wend
Print #1, "</IitemTTN>"
Print #1, "</ArrayOfItemTTN>"
Close #1
rs.Close
dbs.Close
Set rs = Nothing
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39557314
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То, что вы привели, не дает нужной информации. Смотрите, что находится в XML файле, в 5-й строке, где TTN
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39557399
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приведённый olang@tut.by код, характеризует его как человека неленивого...
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39557568
olang@tut.by
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin, вот что стоит в строке (русские буквы выделены синим). меняю на английские - ошибка пропадает.
<?xml version='1.0' encoding='UTF-8'?>
<ArrayOfItemTTN xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/200l/XMLSchema'>
<IitemTTN>
<TYPEOTR>2</TYPEOTR>
<TTN>343434:ккк:21.11.2017</TTN>
<POL>345345345:18010000186:АО "Казцинк"</POL>
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39557618
У вас в заголовке указано encoding='UTF-8', т.е. используется кодировка UTF-8. А ваш код создает файл в кодировке ANSI (windows-1251). ANSI? это однобайтовые символы с кодами от 0 до 255, а в UTF-8 однобайтовые только символы с кодами 0-127, а любые другие - 2-х и даже 3-х байтовые. Видимо тут собака и порылась.
Писать файл в UTF-8 умеет ADODB.Stream. Используйте эту библиотеку. Примеры можно нагуглить в ассортименте.

Еще можно попробовать указать encoding="windows-1251" вместо encoding='UTF-8', но в xsd схеме тоже указана кодировка. В этом я не силен.
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39557637
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olang@tut.by, дай базу, в ней только таблица, запрос и xml-файл как должно быть.
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39558023
olang@tut.by
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, в архиве все файлы с доковой документацией по xml файлу. может дело в ковычках перед UTF-8, но я пробовал и двойные ковычки и одинарные - результат один.
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39558131
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olang@tut.by, у Вас xml-файл имеет кодировку не UTF-8, а windows-1251, Анатолдий Вам оь этом уже писал. После преобразования кодировки все прекрасно открывается.
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39558136
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения за опечатки в предыдущем сообщении.
Вот код для преобразования кодировки:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Public Sub WinToUTF(NameTXT)
Dim StreamIn As ADODB.Stream
Dim StreamOut As ADODB.Stream

Set StreamIn = CreateObject("ADODB.Stream")
Set StreamOut = CreateObject("ADODB.Stream")

StreamIn.Type = 2
StreamIn.Charset = "windows-1251"
StreamIn.Open
StreamIn.LoadFromFile FileXML

StreamOut.Charset = "UTF-8"
StreamOut.Open
StreamOut.WriteText StreamIn.ReadText
StreamOut.SaveToFile FileXML, 2

StreamIn.Close
StreamOut.Close
End Sub
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39558146
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз прошу прощения, замените
Код: vbnet
1.
Public Sub WinToUTF([color=red]NameTXT[/color])


на
Код: vbnet
1.
Public Sub WinToUTF([color=red]FileXML[/color])
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39558207
olang@tut.by
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xax_nv, Спасибо все пошло)
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39558303
olang@tut.byxax_nv, Спасибо все пошло) Что пошло? Создать файл средствами VBA, а затем преобразовать предложенной функцией?
Логичнее сразу создавать файл с помощью ADODB.Stream. Например:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim MyStream As Object
   Set MyStream = CreateObject("ADODB.Stream")
    With MyStream
        .Type = 2 'adTypeText
        .Charset = "Utf-8"
        .Open
        .WriteText "1-я строка", 1 'adWriteLine
        .WriteText "2-я строка", 1
        .WriteText "N-я строка", 1
        .SaveToFile "G:\testXML.xml", 2 'adSaveCreateOverWrite
        .Close
    End With
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39558411
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olang@tut.by, немного подзадержался. В функции используется XSLT-преобразование. Для наглядности выкидывает в файл XML, но можно (я так понимаю тебе это отправлять нужно?) сразу отправлять как запрос.
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39558432
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправил. Пришлось исправить твою функцию getGUID подправить - добавить необязательный параметр, т.к в запросе возвращала один и тот же GUID .
...
Рейтинг: 0 / 0
Как изменить текст в XML
    #39558436
olang@tut.by
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),
файл стал открываться без ошибок. т.е. кодировка прошла
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как изменить текст в XML
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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