purebasic.info

PureBasic forum
Текущее время: Вс июл 22, 2018 11:34 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: XML в кодировке 1251
СообщениеДобавлено: Пт янв 06, 2017 12:55 am 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Добрый день/вечер/утро!
Проблема такая: нужно получать xml-файлы и парсить их, а также делать свои
но всё это добро обрабатывать под xUbuntu и должно оно быть в 1251
смотрел функции работы с xml, но не увидел требуемую кодировку
смотрел функции работы со строками и запись в файл - результат тотже
подскажите как поступить?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Пт янв 06, 2017 1:16 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11208
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Кодировка должна быть задана внутри xml https://ru.wikipedia.org/wiki/XML
Код:
1
<?xml version="1.0" encoding="windows-1251"?>;


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Пт янв 06, 2017 1:26 am 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
если я в файл запишу эту "магическую" строку, а файл сохраню как utf8 то в виндовом блокноте не смогу прочесть русские символы

ps есть идея использовать сцинтиллу. только как с ней общаться?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Пт янв 06, 2017 5:43 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 630
Благодарил (а): 66 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
amer писал(а):
если я в файл запишу эту "магическую" строку, а файл сохраню как utf8 то в виндовом блокноте не смогу прочесть русские символы

ясен пень, не сможешь
в xml и html кодировка самого файла и кодировка указанная в файле всегда должны совпадать иначе получишь кракозяблы


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Пт янв 06, 2017 10:32 am 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Сделал тест:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Procedure ToFile(t$)
  fn$="temp.txt"
  If FileSize(fn$): DeleteFile(fn$): EndIf
  If OpenFile(0, fn$)
    WriteData(0, @t$, StringByteLength(t$))
    CloseFile(0)
  EndIf
EndProcedure
 
Procedure.s UtfToAnsi(String$)
  Protected x.l
  For x = 128 To 143
     String$ = ReplaceString(String$, Chr(209) + Chr(x), Chr(x + 112))
  Next
  For x = 144 To 191
     String$ = ReplaceString(String$, Chr(208) + Chr(x), Chr(x + 48))
  Next
  String$ = ReplaceString(String$, Chr(208) + Chr(129), Chr(168))
  String$ = ReplaceString(String$, Chr(209) + Chr(145), Chr(184))
  ProcedureReturn String$
EndProcedure
 
ToFile(UtfToAnsi("Строка по-русски"))

в итоге получил файл в кодировке UTF-16LE
какие будут предложения?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Пт янв 06, 2017 11:54 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11208
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
amer писал(а):
в итоге получил файл в кодировке UTF-16LE
Процедура называется UtfToAnsi. Видимо подразумевается UTF-8.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Пт янв 06, 2017 3:10 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
ansi - это 866 или 1251?
пурик в какой кодировке со строками работает? (ToFile(UtfToAnsi("Строка по-русски")) - это utf8?)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Пт янв 06, 2017 4:30 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11208
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
amer писал(а):
ansi - это 866 или 1251?
И то и другое. Вообще ASCII это все однобайтные кодировки. https://ru.wikipedia.org/wiki/ASCII
Стандартизированы только символы до кода 127. Остальное - национальные кодировки, а поскольку все они не могут поместиться в оставшихся 128 знакомест, то придумали кодовые страницы. 866 и 1251 это разные кодовые страницы. У них совпадают адреса знакомест, но символы разные.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Сб янв 07, 2017 3:07 am 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
кажися что-то получилось:
Код:
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
43
44
45
46
47
48
49
Procedure ToFile(String$, file$)
  If FileSize(file$): DeleteFile(file$): EndIf
  f=OpenFile(#PB_Any, file$)
  If f
    WriteData(f, @String$, StringByteLength(String$))
    CloseFile(f)
  EndIf
EndProcedure
 
Procedure.s FromFile(file$)
  f=ReadFile(#PB_Any, file$)
  While Eof(f) = 0
    String$+ReadString(f, #PB_Ascii)
  Wend  
  CloseFile(f)
  ProcedureReturn String$
EndProcedure
 
Procedure.s UnicodeTo1251(String$)
  Protected x.l
  For x = 192 To 255
     String$ = ReplaceString(String$, Chr(x+848), Chr(x))
  Next
  String$ = ReplaceString(String$, Chr(1025), Chr(168))
  String$ = ReplaceString(String$, Chr(1105), Chr(184))
  ProcedureReturn String$
EndProcedure
 
Procedure.s W1251ToUnicode(String$)
  Protected x.l
  For x = 192 To 255
     String$ = ReplaceString(String$, Chr(x), Chr(x+848))
  Next
  String$ = ReplaceString(String$, Chr(168), Chr(1025))
  String$ = ReplaceString(String$, Chr(184), Chr(1105))
  ProcedureReturn String$
EndProcedure
 
file$="temp.txt"
ToFile(UnicodeTo1251("Строка по-русски English string"), file$)
 
OpenWindow(0, 0, 0, 600, 400, "", #PB_Window_SystemMenu)
EditorGadget(1, 0, 0, 600, 400, #PB_Editor_WordWrap)
 
SetGadgetText(1, W1251ToUnicode(FromFile(file$)))
Repeat
  gEvent=WaitWindowEvent()
        Delay(3)
Until gEvent=#PB_Event_CloseWindow

вроде работает, но в Mousepad не могу подобрать кодировку для полученного файла, правда в виндовом блокноте открывает и отображает без кракозябр
посмотрите плз. может что не учел?
следующим этапом буду изобретать XML :D


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Сб янв 07, 2017 10:47 am 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Наступил новый этап :lol: :
Код:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#k=Chr(34)
 
Procedure ToFile(String$, file$)
  If FileSize(file$): DeleteFile(file$): EndIf
  f=OpenFile(#PB_Any, file$)
  If f
    WriteData(f, @String$, StringByteLength(String$))
    CloseFile(f)
  EndIf
EndProcedure
 
Procedure.s FromFile(file$)
  f=ReadFile(#PB_Any, file$)
  While Eof(f) = 0
    String$+ReadString(f, #PB_Ascii)
  Wend  
  CloseFile(f)
  ProcedureReturn String$
EndProcedure
 
Procedure.s UnicodeTo1251(String$)
  Protected x.l
  For x = 192 To 255
     String$ = ReplaceString(String$, Chr(x+848), Chr(x))
  Next
  String$ = ReplaceString(String$, Chr(1025), Chr(168))
  String$ = ReplaceString(String$, Chr(1105), Chr(184))
  ProcedureReturn String$
EndProcedure
 
Procedure.s W1251ToUnicode(String$)
  Protected x.l
  For x = 192 To 255
     String$ = ReplaceString(String$, Chr(x), Chr(x+848))
  Next
  String$ = ReplaceString(String$, Chr(168), Chr(1025))
  String$ = ReplaceString(String$, Chr(184), Chr(1105))
  ProcedureReturn String$
EndProcedure
 
Procedure.s NewXML()
  ProcedureReturn "<?xml version="+#k+"1.0"+#k+" encoding="+#k+"windows-1251"+#k+"?>"+#CRLF$
EndProcedure
 
Procedure.s ValidXMLString(string$)
  string$=ReplaceString(string$, "<", "&lt;")
  string$=ReplaceString(string$, ">", "&gt;")
  string$=ReplaceString(string$, "&", "&amp;")
  string$=ReplaceString(string$, "'", "&apos;")
  string$=ReplaceString(string$, #k, "&quot;")
  ProcedureReturn string$
EndProcedure
 
Procedure.s OpenNode(name$)
  ProcedureReturn "<"+name$+">"+#CRLF$
EndProcedure
 
Procedure.s CloseNode(name$)
  ProcedureReturn "</"+name$+">"+#CRLF$
EndProcedure
 
Procedure.s AddNode(name$, string$)
  ProcedureReturn "<"+name$+">"+ValidXMLString(string$)+"</"+name$+">"+#CRLF$
EndProcedure
 
 
file$="temp.txt"
 
t$=NewXML()
t$+OpenNode("ZL_LIST")
  t$+OpenNode("ZGLV")
    t$+AddNode("VERSION", "2.1")
    t$+AddNode("Data", "2016-11-26")
    t$+AddNode("FILENAME", "ht36m360057_16111")
    t$+AddNode("SD_Z", "3")
  t$+CloseNode("ZGLV")
  t$+OpenNode("SCHET")
    t$+AddNode("CODE", "353")
    t$+AddNode("CODE_MO", "360057")
    t$+AddNode("YEAR", "2016")
    t$+AddNode("MONTH", "11")
    t$+AddNode("DSCHET", "2016-11-14")
    t$+AddNode("PLAT", "36071")
    t$+AddNode("SUMMAV", "1647.61")
    t$+AddNode("COMMENT", "сТРОКА НА РУССКОМ, простите, капс :)")
  t$+CloseNode("SCHET")
t$+CloseNode("ZL_LIST")
 
ToFile(UnicodeTo1251(t$), file$)
 
OpenWindow(0, 0, 0, 600, 400, "", #PB_Window_SystemMenu)
EditorGadget(1, 0, 0, 600, 400, #PB_Editor_WordWrap)
 
SetGadgetText(1, W1251ToUnicode(FromFile(file$)))
Repeat
  gEvent=WaitWindowEvent()
        Delay(3)
Until gEvent=#PB_Event_CloseWindow
 

жду комменты и предложения по улучшению


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Сб янв 07, 2017 1:30 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11208
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Так будет быстрее работать.
Код:
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
Procedure.s FromFile(file$)
  f=ReadFile(#PB_Any, file$)
  If f
    l.q = Lof(f)
    If l>0
      Dim Buff.a(l)
      ReadData(f, @Buff(), l)
      String$ = PeekS(@Buff(), l, #PB_Ascii)
    EndIf
    CloseFile(f)
  EndIf
  ProcedureReturn String$
EndProcedure
 
Procedure.s UnicodeTo1251(String$)
  Protected x.l
  For x = 192 To 255
     ReplaceString(String$, Chr(x+848), Chr(x), #PB_String_InPlace)
  Next
  ReplaceString(String$, Chr(1025), Chr(168), #PB_String_InPlace)
  ReplaceString(String$, Chr(1105), Chr(184), #PB_String_InPlace)
  ProcedureReturn String$
EndProcedure
 
Procedure.s W1251ToUnicode(String$)
  Protected x.l
  For x = 192 To 255
     ReplaceString(String$, Chr(x), Chr(x+848), #PB_String_InPlace)
  Next
  ReplaceString(String$, Chr(168), Chr(1025), #PB_String_InPlace)
  ReplaceString(String$, Chr(184), Chr(1105), #PB_String_InPlace)
  ProcedureReturn String$
EndProcedure



amer писал(а):
следующим этапом буду изобретать XML
Его давно изобрели http://www.purebasic.com/documentation/xml/index.html

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Сб янв 07, 2017 2:18 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
fromfile не работает
средствами пурика не нашел как сохранить XML в кодировке Windows-1251


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Сб янв 07, 2017 2:49 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11208
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
fromfile как раз работает. Это ToFile сохраняет в юникоде. Должно быть
Код:
1
2
3
4
5
6
7
8
Procedure ToFile(String$, file$)
  If FileSize(file$): DeleteFile(file$): EndIf
  f=OpenFile(#PB_Any, file$)
  If f
    WriteString(f, String$, #PB_Ascii)
    CloseFile(f)
  EndIf
EndProcedure



Но и это не решает проблемы - русский искажается. Все дело в UnicodeTo1251 Неперекодирует она в ASCII. Строка как была с двухбайтным представлением символов, так и остается.
Так работает
Код:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#k=Chr(34)
 
Procedure ToFile(String$, file$)
  If FileSize(file$): DeleteFile(file$): EndIf
  f=OpenFile(#PB_Any, file$)
  If f
    ;WriteString(f, String$, #PB_Ascii)
    *p=Ascii(String$)
    If *p
      WriteData(f, *p, MemorySize(*p)-1)
      FreeMemory(*p)
    EndIf
    CloseFile(f)
  EndIf
EndProcedure
 
Procedure.s FromFile(file$)
  f=ReadFile(#PB_Any, file$)
  If f
    l.q = Lof(f)
    If l>0
      Dim Buff.a(l)
      ReadData(f, @Buff(), l)
      String$ = PeekS(@Buff(), l, #PB_Ascii)
    EndIf
    CloseFile(f)
  EndIf
  ProcedureReturn String$
EndProcedure
 
Procedure.s UnicodeTo1251(String$)
  ProcedureReturn String$
  Protected x.l
  For x = 192 To 255
     ReplaceString(String$, Chr(x+848), Chr(x), #PB_String_InPlace)
  Next
  ReplaceString(String$, Chr(1025), Chr(168), #PB_String_InPlace)
  ReplaceString(String$, Chr(1105), Chr(184), #PB_String_InPlace)
  ProcedureReturn String$
EndProcedure
 
Procedure.s W1251ToUnicode(String$)
  Protected x.l
  For x = 192 To 255
     ReplaceString(String$, Chr(x), Chr(x+848), #PB_String_InPlace)
  Next
  ReplaceString(String$, Chr(168), Chr(1025), #PB_String_InPlace)
  ReplaceString(String$, Chr(184), Chr(1105), #PB_String_InPlace)
  ProcedureReturn String$
EndProcedure
 
 
Procedure.s NewXML()
  ProcedureReturn "<?xml version="+#k+"1.0"+#k+" encoding="+#k+"windows-1251"+#k+"?>"+#CRLF$
EndProcedure
 
Procedure.s ValidXMLString(string$)
  string$=ReplaceString(string$, "<", "&lt;")
  string$=ReplaceString(string$, ">", "&gt;")
  string$=ReplaceString(string$, "&", "&amp;")
  string$=ReplaceString(string$, "'", "&apos;")
  string$=ReplaceString(string$, #k, "&quot;")
  ProcedureReturn string$
EndProcedure
 
Procedure.s OpenNode(name$)
  ProcedureReturn "<"+name$+">"+#CRLF$
EndProcedure
 
Procedure.s CloseNode(name$)
  ProcedureReturn "</"+name$+">"+#CRLF$
EndProcedure
 
Procedure.s AddNode(name$, string$)
  ProcedureReturn "<"+name$+">"+ValidXMLString(string$)+"</"+name$+">"+#CRLF$
EndProcedure
 
 
file$="D:\temp.txt"
 
t$=NewXML()
t$+OpenNode("ZL_LIST")
  t$+OpenNode("ZGLV")
    t$+AddNode("VERSION", "2.1")
    t$+AddNode("Data", "2016-11-26")
    t$+AddNode("FILENAME", "ht36m360057_16111")
    t$+AddNode("SD_Z", "3")
  t$+CloseNode("ZGLV")
  t$+OpenNode("SCHET")
    t$+AddNode("CODE", "353")
    t$+AddNode("CODE_MO", "360057")
    t$+AddNode("YEAR", "2016")
    t$+AddNode("MONTH", "11")
    t$+AddNode("DSCHET", "2016-11-14")
    t$+AddNode("PLAT", "36071")
    t$+AddNode("SUMMAV", "1647.61")
    t$+AddNode("COMMENT", "сТРОКА НА РУССКОМ, простите, капс :)")
  t$+CloseNode("SCHET")
t$+CloseNode("ZL_LIST")
 
ToFile(UnicodeTo1251(t$), file$)
 
OpenWindow(0, 0, 0, 600, 400, "", #PB_Window_SystemMenu)
EditorGadget(1, 0, 0, 600, 400, #PB_Editor_WordWrap)
 
SetGadgetText(1, W1251ToUnicode(FromFile(file$)))
Repeat
  gEvent=WaitWindowEvent()
        Delay(3)
Until gEvent=#PB_Event_CloseWindow



amer писал(а):
средствами пурика не нашел как сохранить XML в кодировке Windows-1251
XML экспортируется в строку функцией ComposeXML(), а затем перекодируется в ASCII и сохраняется в файле.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Сб янв 07, 2017 3:30 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11208
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Пример загрузки
Код:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
Procedure LoadXML_1251(XML, FileName.s)
  r=0
 
  f = ReadFile(#PB_Any, FileName)
  If f
   
    l.q = Lof(f)
    If l>0
     
      Dim Buff.a(l)
      ReadData(f, @Buff(), l)
     
      String$ = PeekS(@Buff(), l, #PB_Ascii)
     
      String$ = ReplaceString(String$, ~"encoding=\"windows-1251\"", ~"encoding=\"UTF-16\"", #PB_String_CaseSensitive, 1, 1)
      Debug String$
      r = ParseXML(XML, String$)
     
    EndIf
   
    CloseFile(f)
  EndIf
 
  ProcedureReturn r
EndProcedure
 
 
 
#Window     = 0
#TreeGadget = 0
#XML        = 0
 
; This procedure fills our TreeGadget, by adding the current node
; and then exploring all childnodes by recursively calling itself.
;
Procedure FillTree(*CurrentNode, CurrentSublevel)
 
  ; Ignore anything except normal nodes. See the manual for
  ; XMLNodeType() for an explanation of the other node types.
  ;
  If XMLNodeType(*CurrentNode) = #PB_XML_Normal
 
    ; Add this node to the tree. Add name and attributes
    ;
    Text$ = GetXMLNodeName(*CurrentNode) + " (Attributes: "
   
    Text$ + GetXMLNodeText(*CurrentNode)
;     If ExamineXMLAttributes(*CurrentNode)
;       While NextXMLAttribute(*CurrentNode)
;         Text$ + XMLAttributeName(*CurrentNode) + "=" + Chr(34) + XMLAttributeValue(*CurrentNode) + Chr(34) + " "
;       Wend
;     EndIf
   
    ;Text$
   
    Text$ + ")"
   
    AddGadgetItem(#TreeGadget, -1, Text$, 0, CurrentSublevel)
       
       
    ; Now get the first child node (if any)
    ;    
    *ChildNode = ChildXMLNode(*CurrentNode)
   
    ; Loop through all available child nodes and call this procedure again
    ;
    While *ChildNode <> 0
      FillTree(*ChildNode, CurrentSublevel + 1)      
      *ChildNode = NextXMLNode(*ChildNode)
    Wend        
 
  EndIf
 
EndProcedure
 
 
FileName$ = OpenFileRequester("Choose XML file...", "", "XML files (*.xml)|*.xml|All files (*.*)|*.*", 0)
If FileName$ <> ""
 
  If LoadXML_1251(#XML, FileName$)
 
    ; Note:
    ;   The LoadXML() succeed if the file could be read. This does not mean that
    ;   there was no error in the XML though. To check this, XMLStatus() can be
    ;   used.
    ;
    ; Display an error message if there was a markup error
    ;
    If XMLStatus(#XML) <> #PB_XML_Success
      Message$ = "Error in the XML file:" + Chr(13)
      Message$ + "Message: " + XMLError(#XML) + Chr(13)
      Message$ + "Line: " + Str(XMLErrorLine(#XML)) + "   Character: " + Str(XMLErrorPosition(#XML))
      MessageRequester("Error", Message$)
    EndIf
   
    ; Note:
    ;   Even if there was an error in the XML, all nodes before the error position
    ;   are still accessible, so open the window and show the tree anyway.
    ;
    If OpenWindow(#Window, 0, 0, 500, 500, "XML Example", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
      TreeGadget(#TreeGadget, 10, 10, 480, 480)
     
      ; Get the main XML node, and call the FillTree() procedure with it
      ;
      *MainNode = MainXMLNode(#XML)      
      If *MainNode
        FillTree(*MainNode, 0)
      EndIf
     
      ; Expand all nodes for a nicer view
      ;
      For i = 0 To CountGadgetItems(#TreeGadget) - 1
        SetGadgetItemState(#TreeGadget, i, #PB_Tree_Expanded)
      Next i
     
      ; Wait for the window close event.
      ;
      Repeat
        Event = WaitWindowEvent()
      Until Event = #PB_Event_CloseWindow
    EndIf
       
  Else
    MessageRequester("Error", "The file cannot be opened.")
  EndIf
 
EndIf
 

Сохранение производится аналогично.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Сб янв 07, 2017 3:34 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
[15:34:09] [COMPILER] Line 9: Ascii() is not a function, array, list, map or macro.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB