-
заполняю XmlDoc следующими данными:
<log LogDate="2013-08-03 00:00:00.0" UserId="21" ComputerId="19" ActivityId="5" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="monetar VP.ods - OpenOffice.org Calc" Url="" ActivityTime="2" ForegroundTime="437"></log>
<log LogDate="2013-08-03 00:00:00.0" UserId="21" ComputerId="19" ActivityId="1" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="winlogon (session locked)" Url="" ActivityTime="22" ForegroundTime="1447"></log>
<log LogDate="2013-08-03 00:00:00.0" UserId="21" ComputerId="19" ActivityId="2" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="SAP Logon 730" Url="" ActivityTime="3" ForegroundTime="3"></log>
<log LogDate="2013-08-03 00:00:00.0" UserId="21" ComputerId="19" ActivityId="4" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="Documente" Url="" ActivityTime="2" ForegroundTime="2"></log>
<log LogDate="2013-08-03 00:00:00.0" UserId="21" ComputerId="19" ActivityId="2" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="SAP" Url="" ActivityTime="9" ForegroundTime="9"></log>
<log LogDate="2013-08-03 00:00:00.0" UserId="21" ComputerId="19" ActivityId="2" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="SAP Acces uєor" Url="" ActivityTime="5" ForegroundTime="5"></log>
<log LogDate="2013-08-03 00:00:00.0" UserId="21" ComputerId="19" ActivityId="2" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="Incasare casierie cu clearing" Url="" ActivityTime="29" ForegroundTime="29"></log>
<log LogDate="2013-08-03 00:00:00.0" UserId="21" ComputerId="19" ActivityId="2" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="Numгr cont sau cheie a listei de lucru (1)" Url="" ActivityTime="3" ForegroundTime="3"></log>
<log LogDate="2013-08-03 00:00:00.0" UserId="21" ComputerId="19" ActivityId="2" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="Numгr cont sau cheie a listei de lucru (1) 5 Intrгri gгsite" Url="" ActivityTime="2" ForegroundTime="2"></log>
<log LogDate="2013-08-03 00:00:00.0" UserId="21" ComputerId="19" ActivityId="2" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="Incasare casierie cu/fara clirPrelucrare poziюii desch" Url="" ActivityTime="2" ForegroundTime="2"></log>
<log LogDate="2013-08-03 00:00:00.0" UserId="21" ComputerId="19" ActivityId="2" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="Incasare casierie cu/fara clirIntrod.plгюi parюiale" Url="" ActivityTime="12" ForegroundTime="426"></log>
При попытке загрузки xml с этими данными в бд ms sql получаю такую ошибку: The XML parse error 0xc00ce558 occurred on line number 0, near the XML text "" XmlDoc.Encoding выставлен как windows-1250 В чём тут может быть дело? Большинство данных грузится без ошибок, данный случай весьма редко случается.
-
Уточнение: проблема не в бд скл, а в xml. при сохранении xmldoc в stream он оказывается пустым. а XML parse error уже реакция адо на пустой стрим..
итого - вопрос, почему xmldoc не сохраняет ничего в стрим при данных условиях? юзю элементарно XmlDoc.SaveToStream(XmlStream);
-
должно быть, конфликт кодировок, спотыкается на какой-то румынской букве. надо смотреть, как именно загружается этот текст в xmldoc.
-
загружается из датасета вот так: XmlNode.Attributes['Caption'] := Fields[iFinished2Caption].AsString;
а как понять, какой именно символ его валит?
да, если этот баг зависит от локали и тп, в винде с одними настройками локали - есть, в другой - нет. НО. какое дело xml'ю до этого? я его объект использую просто для формирования строки и уже перешел на прямой вариант.. просто пытаюсь понять, почему так получается с xmldoc'ом...
-
ах-ах, опять вру) обошелся без xmldoc, подсовываю в адо этот xml и получаю опять ошибку: The XML parse error 0xc00ce556 occurred on line number 0, near the XML text ""
[8/7/2013 12:34:40 AM]: <?xml version="1.0" encoding="windows-1250"?><root><log LogDate="2013-08-03 00:00:00.0" UserId="24" ComputerId="22" ActivityId="22" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="monetar VP.ods - OpenOffice.org Calc" Url="" ActivityTime="2" ForegroundTime="437"/><log LogDate="2013-08-03 00:00:00.0" UserId="24" ComputerId="22" ActivityId="22" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="winlogon (session locked)" Url="" ActivityTime="22" ForegroundTime="1447"/><log LogDate="2013-08-03 00:00:00.0" UserId="24" ComputerId="22" ActivityId="22" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="SAP Logon 730" Url="" ActivityTime="3" ForegroundTime="3"/><log LogDate="2013-08-03 00:00:00.0" UserId="24" ComputerId="22" ActivityId="22" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="Documente" Url="" ActivityTime="2" ForegroundTime="2"/><log LogDate="2013-08-03 00:00:00.0" UserId="24" ComputerId="22" ActivityId="22" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="SAP" Url="" ActivityTime="9" ForegroundTime="9"/><log LogDate="2013-08-03 00:00:00.0" UserId="24" ComputerId="22" ActivityId="22" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="SAP Acces uєor" Url="" ActivityTime="5" ForegroundTime="5"/><log LogDate="2013-08-03 00:00:00.0" UserId="24" ComputerId="22" ActivityId="22" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="Incasare casierie cu clearing" Url="" ActivityTime="29" ForegroundTime="29"/><log LogDate="2013-08-03 00:00:00.0" UserId="24" ComputerId="22" ActivityId="22" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="Numгr cont sau cheie a listei de lucru (1)" Url="" ActivityTime="3" ForegroundTime="3"/><log LogDate="2013-08-03 00:00:00.0" UserId="24" ComputerId="22" ActivityId="22" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="Numгr cont sau cheie a listei de lucru (1) 5 Intrгri gгsite" Url="" ActivityTime="2" ForegroundTime="2"/><log LogDate="2013-08-03 00:00:00.0" UserId="24" ComputerId="22" ActivityId="22" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="Incasare casierie cu/fara clirPrelucrare poziюii desch" Url="" ActivityTime="2" ForegroundTime="2"/><log LogDate="2013-08-03 00:00:00.0" UserId="24" ComputerId="22" ActivityId="22" ActivityType="0" ParentActivityId="0" HourOfDay="13" Caption="Incasare casierie cu/fara clirIntrod.plгюi parюiale" Url="" ActivityTime="12" ForegroundTime="426"/></root> если параметр Caption передавать пустым, то ошибки нет. соответственно, дело в кодировках, так? и куда тут копать, чтобы вне зависимости от ОС и тп местные символы (выше 128го как я понял..) просто подставлялись из локальной ascii таблицы?
-
> просто подставлялись из локальной ascii таблицы? xml попробуй формировать в utf-8/юникоде.
-
> а как понять, какой именно символ его валит? логи есть? вот в них и посмотри на каком xml ошибка, и открывает ли его хотя бы IE после преобразований которые делаются автоматом при использовании string.
-
попробовал юникод, в каких-то случаях работает, в каких-то - нет( основные моменты кода:
str: widestring;
...
XmlStream.WriteBuffer(str[1], length(str)*SizeOf(WideChar));
....
AddSummaryActivitiesExFromXml(var AXmlLogs: TStream);
....
with Parameters.AddParameter do
begin
Name := '@XMLLogs';
DataType := ftMemo;
LoadFromStream(AXmlLogs, ftWideString);
end; в итоге xml заполняю верно, и хоть с encoding = win1251 или utf8, хоть без encoding получаю такие вещи: The XML parse error 0xc00ce520 occurred on line number 1, near the XML text "<?xml version="1.0"><root><log LogDate="2013-08-12 00:00:00.0" UserId="2" ComputerId="1" ActivityId="10" ActivityType="0" ParentActivityId="0" HourOfDay="20" Caption="C:\Program Files\Borland\Delphi7\Projects\D\Units\Sources\Current\BLL_utf\WeSqlProviders.pa s" Url="" ActivityTime="8" ForegroundTime="121"/><log LogDate="2013-08-12 00:00:00.0" UserId="2" ComputerId="1" ActivityId="10" ActivityType="0" ParentActivityId="0" HourOfDay="20" Caption="MainForm.pas" Url="" ActivityTime="59" ForegroundTime="59"/></root>"
-
сделал DataType := ftWideString, теперь имею AddSummaryActivitiesExFromXml (web), stream size = 686 [_package_.zip] (app) exception: The XML parse error 0xc00ce50d occurred on line number 1, near the XML text "<?xml version="1.0" encoding="windows-1251"?><root><log LogDate="2013-08-12 00:00:00.0" UserId="2" ComputerId="1" ActivityId="141" ActivityType="1" ParentActivityId="0" HourOfDay="20" Caption="тест — Яндекс: нашлось 107 млн ответов - Google Chrome" Url="http:
-
Url="http: А амперсанд экранировать Пушкин будет?
-
сенкс... экранирование вроде вылечивает... НО.. почему косяки экранирования не лезли при неюникодном XML'е... ???
-
такого экранирования достаточно или еще что-то есть? & - &
< - <
> - >
" - "
' - '
-
> такого экранирования достаточно или еще что-то есть?
Для xml по стандарту, вроде как достаточно. Для всяких HTML - нет
-
Пиши через атрибуты, !предварительно! Указав кодировку. Также косяки в данных хорошо выявляет w3c-XML validator
|