Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как изменить текст в XML / 22 сообщений из 22, страница 1 из 1
22.11.2005, 11:12
    #33391757
arinas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
Привет! У меня следующий вопрос. Есть источник - база аксесс, оттуда таблица, методом экспорта, выгружается в файл 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
22.11.2005, 11:29
    #33391832
Билли
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
...
Рейтинг: 0 / 0
22.11.2005, 12:47
    #33392168
Fat Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
Варианты решения:

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

В твоем случае вариант 2 мне кажеся предпочтительнее - он быстрее в разработке. С другой стороны, на будущее знать работу связки XML-XSL тоже не вредно.
...
Рейтинг: 0 / 0
22.11.2005, 18:28
    #33393332
arinas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
Решила двигаться по второму варианту. Экспортирую файл из 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
22.11.2005, 23:41
    #33393592
Fat Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
Может быть я невнятно выразился, но я имел ввиду вот что:

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

Ежели что не понятно-спрашивай.
...
Рейтинг: 0 / 0
23.11.2005, 00:02
    #33393598
Fat Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
Что-то в таком вот духе:
Код: 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
23.11.2005, 21:33
    #33395860
arinas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
Fat Lamer! Ты просто супер!!! Спасибо тебе огромное! Вот где загвоздка то была! не нужно было городить выгрузку в xml, а потом его изменение, а сразу формировать необходимый файл из таблицы...Спасибо тебе еще раз!!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.11.2017, 09:00
    #39557294
olang@tut.by
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
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
22.11.2017, 10:10
    #39557314
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
То, что вы привели, не дает нужной информации. Смотрите, что находится в XML файле, в 5-й строке, где TTN
...
Рейтинг: 0 / 0
22.11.2017, 12:06
    #39557399
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
Приведённый olang@tut.by код, характеризует его как человека неленивого...
...
Рейтинг: 0 / 0
22.11.2017, 15:14
    #39557568
olang@tut.by
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
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
22.11.2017, 15:55
    #39557618
Как изменить текст в XML
У вас в заголовке указано 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
22.11.2017, 16:12
    #39557637
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
olang@tut.by, дай базу, в ней только таблица, запрос и xml-файл как должно быть.
...
Рейтинг: 0 / 0
23.11.2017, 09:05
    #39558023
olang@tut.by
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
Панург, в архиве все файлы с доковой документацией по xml файлу. может дело в ковычках перед UTF-8, но я пробовал и двойные ковычки и одинарные - результат один.
...
Рейтинг: 0 / 0
23.11.2017, 11:40
    #39558131
xax_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
olang@tut.by, у Вас xml-файл имеет кодировку не UTF-8, а windows-1251, Анатолдий Вам оь этом уже писал. После преобразования кодировки все прекрасно открывается.
...
Рейтинг: 0 / 0
23.11.2017, 11:46
    #39558136
xax_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
Прошу прощения за опечатки в предыдущем сообщении.
Вот код для преобразования кодировки:
Код: 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
23.11.2017, 12:04
    #39558146
xax_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
Еще раз прошу прощения, замените
Код: vbnet
1.
Public Sub WinToUTF([color=red]NameTXT[/color])


на
Код: vbnet
1.
Public Sub WinToUTF([color=red]FileXML[/color])
...
Рейтинг: 0 / 0
23.11.2017, 13:20
    #39558207
olang@tut.by
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
xax_nv, Спасибо все пошло)
...
Рейтинг: 0 / 0
23.11.2017, 14:35
    #39558303
Как изменить текст в XML
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
23.11.2017, 15:52
    #39558411
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
olang@tut.by, немного подзадержался. В функции используется XSLT-преобразование. Для наглядности выкидывает в файл XML, но можно (я так понимаю тебе это отправлять нужно?) сразу отправлять как запрос.
...
Рейтинг: 0 / 0
23.11.2017, 16:07
    #39558432
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
Поправил. Пришлось исправить твою функцию getGUID подправить - добавить необязательный параметр, т.к в запросе возвращала один и тот же GUID .
...
Рейтинг: 0 / 0
23.11.2017, 16:13
    #39558436
olang@tut.by
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить текст в XML
Анатолий ( Киев ),
файл стал открываться без ошибок. т.е. кодировка прошла
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как изменить текст в XML / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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