XML C8 - не понял...
Добавлено: 26 Май 2015, 11:44
				
				Вот примеры выше и раскодируют UTF-8 в ASCII
			Место общения программистов, форум разработчиков БД на Clarion
https://forum.clarionlife.net/
Это понятно. После раскодирования вместо русского текста в C63 какой-то мусор.

Код: Выделить всё
SaveManifest    ROUTINE  ! Сохранить манифест
                DATA
CS              CSTR                
                CODE
                CS.Set('<<?xml version="1.0" encoding="UTF-8" ?>')
                CS.CAT('<13,10><<structure>')                
                CS.Cat('<13,10><<program title="' & ANSI2HTML(Loc:MName) & '"/>')
                LOOP ManQ# = 1 to Records(ManQ) 
                  Get(ManQ, ManQ#) 
                  CS.Cat('<13,10><<topic level="' & ManQ:Level |
                  & '" id="' & Clip(ManQ:ID) & '" name="' & ANSI2HTML(ManQ:Name) & '" />') 
                END   
                CS.Cat('<13,10><</structure>') 
                CS.ToUTF8() 
                CS.SaveToFile(Loc:ManifestFileName) 
                EXIT 
С этого и начал. Не доходит даже до первого оператора...7 Май 2015, 7:02
Если падает при объявлении, значит глючит конструктор, поставьте дебаг туда. Но там всё настолько очевидно...
Это было второй попыткой. Компилиться не захотел...Или даже
СS &Cstr
Вот это попробую. Хотя как-то мудрено... Тот же ХМЛ класс при обьявлении переменных ведет себя нормально...написать CS Class(Cstr)
END
Код: Выделить всё
Doc &= XMLStringToDOM(CS.S)
If Doc &= null Then Message('Aaaa!!!')
End
FillDOMQueue(Doc, ListXML)
Loop I# = 1 To Records(ListXML)
Get(ListXML, I#)
CS.Set(ListXML.node.GetNodeValue())
CS.ToASCII()
Stop(ListXML.level & ' - ' & ListXML.node.GetNodeName() & ' - ' & CS.S & ' - ' & ListXML.node.GetNodeType())
End
If not Doc &= null Then Doc.Dispose() End
  Вроде судя по коду ViewXML это не особенно сложно.
 Вроде судя по коду ViewXML это не особенно сложно.
Код: Выделить всё
LoadManifest        ROUTINE  ! Загрузка манифеста 
                    DATA
xmlDoc              &Document,Auto
Nl                  &Nodelist,Auto
nnm                 &NamedNodeMap,auto
ANode               &Node,Auto
AttrIndex           Long
ListXML     queue(DOMQueue) ! Очередь для считывания параметров
            end
!               ! Создадим пустой манифест 
!               CS.Set('<<?xml version="1.0" encoding="UTF-8" ?>')
!               CS.CAT('<13,10><<structure>')                
!               CS.Cat('<13,10><<program title="Наименование проекта"/>')
!               CS.Cat('<13,10><<topic level=0 id="ГЛМЕНЮ" name="Главное меню" />') 
!               CS.Cat('<13,10><</structure>') 
                    CODE
                    Ret# = CS.LoadFromFile(Loc:ManifestFileName) 
                    If Ret#
                      Message('Ошибка загрузки манифеста ' & Loc:ManifestFileName )
                      Exit 
                    End
                    XmlDoc &= XmlStringToDom(CS.S)
                    If XMLDoc &= Null
                      Message('Ошибка разборки манифеста ' & Loc:ManifestFileName )
                      EXIT 
                    End
                    FillDomQueue(XMLDoc,ListXML,1)                    
                    FREE(ManQ) 
                    LOOP ListXML# = 1 to Records(ListXML) 
                       Get(ListXML, ListXML#) 
                       CASE lower(ListXML.Node.getNodeName())
                       OF 'topic'
                            nnm &= ListXML.Node.getAttributes()
                            IF not nnm &= null
                                Loop AttrIndex = 0 to nnm.getLength() - 1
                                    Anode &= nnm.item(AttrIndex)
                                    CS.Set(Anode.GetNodeValue())
                                    CS.ToAscii()
                                    Case lower(ANode.GetNodename())
                                    Of 'level' !               
                                        ManQ:Level = CS.S 
                                    OF 'id' 
                                        ManQ:ID = Clip(CS.S) 
                                    OF 'name' 
                                        ManQ:Name = Clip(CS.S)
                                    END 
                                END     
                                ADD(ManQ) 
                            END 
                       OF 'program' 
                            nnm &= ListXML.Node.getAttributes()
                            IF not nnm &= null
                                Loop AttrIndex = 0 to nnm.getLength() - 1
                                    Anode &= nnm.item(AttrIndex)
                                    CS.Set(Anode.GetNodeValue())
                                    CS.ToAscii()
                                    Case lower(ANode.GetNodename())
                                    Of 'title' !               
                                        Loc:MName=CS.S
                                    END 
                                END     
                            END ! If nnm &= Null 
                       END  ! Case NodeName 
                    END  ! Loop ListXML# 
                    XMLDoc.Release()
                    Display() 
                    EXIT 


 ))
))