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
Код: Выделить всё
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