![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TXMLDocuemnt, проблема с кирилицей [D6, Win2k]
Calm © (2004-10-20 15:01:00)Уважаемые коллеги,
пишу сохранение данных в xml-файл.
Написал вот такой метод:
procedure TSmeta.Save(FileName: string);
var
xmlWorkList:IXMLNode;
xmlWork:IXMLNode;
xmlWorkParam:IXMLNode;
xmlKoeffList:IXMLNode;
i:Integer;
begin
dmCore.XMLDocument.XML.Add('<?xml version="1.0" standalone=''yes'' ?>');
dmCore.XMLDocument.XML.Add('<smeta>'); // создаю xml с корневым элементом
dmCore.XMLDocument.XML.Add('</smeta>');
dmCore.XMLDocument.Active:=True;
xmlWorkList:=dmCore.XMLDocument.DocumentElement.AddChild('works');
xmlWorkList.Attributes['count']:=Works.Count; // это не требуется, просто тренируюсь записывать атрибуты :)
// сохраняем все работы
i:=0;
while (i<=Works.Count-1) do
begin
xmlWork:=xmlWorkList.AddChild('work');
xmlWorkParam:=xmlWork.AddChild('id');
xmlWorkParam.Text:=IntToStr(Works[i].id);
xmlWorkParam:=dmCore.XMLDocument.CreateNode('caption', ntElement);
xmlWorkParam.Text:=Works[i].Caption; // это строковое поле с кирилицей
xmlWork.ChildNodes.Add(xmlWorkParam);
xmlWorkParam:=xmlWork.AddChild('price_total');
xmlWorkParam.Text:=FormatFloat('0.#####', Works[i].Price_total);
Inc(i);
end;
dmCore.XMLDocument.SaveToFile(FIleName);
end;
Должен получиться файл примерно структуры:
<?xml version="1.0" standalone="yes"?>
<smeta>
<works count="2">
<work>
<id>0</id>
<caption>Тестовая запись на русском языке</caption>
<price_total>10,9</price_total>
</work>
<work>
<id>0</id>
<caption>Martishkin trud</caption>
<price_total>13,4</price_total>
</work>
</works>
</smeta>
Вызываю метод, получаю на месте кирилицы совершенно непонятные значки неизвестной кодировки.
Возмжно это unicode? как отлючить юникод?
В demos'ах нашел только проект XMLBuilder, но не обнаружил там ответов на свои вопросы :(
Хелп, разумеется, тоже читал внимательно(?) :))
Буду признателен за ссылки с подробными материалами по теме TXMLDocument и с чем его едят.
Algol (2004-10-20 17:02:00) [1]
> Да, кстати, я таким обазом могу записать любой текст с любыми
> печатными знаками?
Нет, не любыми. Читай спецификацию XML
Calm (2004-10-20 16:57:00) [2]Отображается в эксплорере. А у меня собственно к эклсплореру никаких притензий :))
В ставил эту строку в прогу - заработало. Видимо где-то какой-то символ неаккуратно вставился\недописался.
спасибо, Algol.
Да, кстати, я таким обазом могу записать любой текст с любыми печатными знаками?
Как быть с многострочным текстом?
Algol (2004-10-20 16:52:00) [3]Да как это не решает??
Скопируй вот это
<?xml version="1.0" encoding="windows-1251" standalone="yes"?>
<smeta>
<works count="2">
<work>
<id>0</id>
<caption>Тестовая запись на русском языке</caption>
<price_total>10,9</price_total>
</work>
<work>
<id>0</id>
<caption>Martishkin trud</caption>
<price_total>13,4</price_total>
</work>
</works>
</smeta>
В блокнот, сохрани в temp.xml, открой в эксплорере, и скажи мне что оно не отображается!
Calm (2004-10-20 16:44:00) [4]Проверил,
использование только кавычек " или только апострофов ' проблемы не решает.
:(
Calm (2004-10-20 16:42:00) [5]да вообще-то я этот фрагмент из хелпа взял и до добавления encoding="windows-1251" это работало. За исключением кириллицы.
Algol (2004-10-20 16:40:00) [6]У тебя просто во фрагменте standalone=''yes''два апострофа вместо кавычек ...
Calm (2004-10-20 16:37:00) [7]Не помогает :(
Пишу
<?xml version="1.0" standalone=''yes'' encoding="windows-1251" ?>
Получаю исключение с текстом
Invalid for an xml declaration
Line: 1
<?xml version="1.0" standalone='yes' enc' Process stopped ...
Algol (2004-10-20 16:16:00) [8]<?xml version="1.0" standalone="yes" encoding="windows-1251"?>