Конференция "Базы" » XML parse error [D7, MSSQL]
 
  • istok20 © (06.08.13 23:12) [0]
    заполняю 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

    В чём тут может быть дело? Большинство данных грузится без ошибок, данный случай весьма редко случается.
  • istok (06.08.13 23:36) [1]
    Уточнение: проблема не в бд скл, а в xml. при сохранении xmldoc в stream он оказывается пустым. а XML parse error уже реакция адо на пустой стрим..

    итого - вопрос, почему xmldoc не сохраняет ничего в стрим при данных условиях?  юзю элементарно XmlDoc.SaveToStream(XmlStream);
  • RWolf © (07.08.13 00:03) [2]
    должно быть, конфликт кодировок, спотыкается на какой-то румынской букве.
    надо смотреть, как именно загружается этот текст в xmldoc.
  • istok20 © (07.08.13 00:24) [3]
    загружается из датасета вот так:
    XmlNode.Attributes['Caption'] := Fields[iFinished2Caption].AsString;

    а как понять, какой именно символ его валит?

    да, если этот баг зависит от локали и тп, в винде с одними настройками локали - есть, в другой - нет.  НО. какое дело xml'ю до этого? я его объект использую просто для формирования строки и уже перешел на прямой вариант..  просто пытаюсь понять, почему так получается с xmldoc'ом...
  • istok20 © (07.08.13 00:54) [4]
    ах-ах, опять вру) обошелся без 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 таблицы?
  • sniknik © (07.08.13 07:55) [5]
    > просто подставлялись из локальной ascii таблицы?
    xml попробуй формировать в utf-8/юникоде.
  • sniknik © (07.08.13 08:18) [6]
    > а как понять, какой именно символ его валит?
    логи есть? вот в них и посмотри на каком xml ошибка, и открывает ли его хотя бы IE после преобразований которые делаются автоматом при использовании string.
  • istok20 © (12.08.13 21:19) [7]
    попробовал юникод, в каких-то случаях работает, в каких-то - нет(

    основные моменты кода:


    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>"

  • istok20 © (12.08.13 21:56) [8]
    сделал DataType := ftWideString, теперь имею

    AddSummaryActivitiesExFromXml (web), stream size = 686 [_package_{1952AE68-D143-4603-8828-291FDD6FA684}.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://yandex.ru/yandsearch?text=тест&lr=4" ActivityTime="4" ForegroundTime="54"/></root>"

  • Ega23 © (12.08.13 23:12) [9]
    Url="http://yandex.ru/yandsearch?text=тест&lr=4"


    А амперсанд экранировать Пушкин будет?
  • istok20 © (12.08.13 23:28) [10]
    сенкс... экранирование вроде вылечивает... НО.. почему косяки экранирования не лезли при неюникодном XML'е... ???
  • istok20 © (12.08.13 23:28) [11]
    такого экранирования достаточно или еще что-то есть?

    & - &
    < - <
    > - >
    " - "
    ' - &#39;

  • Ega23 © (13.08.13 10:07) [12]

    > такого экранирования достаточно или еще что-то есть?

    Для xml по стандарту, вроде как достаточно. Для всяких HTML - нет
  • Cobalt © (15.08.13 20:41) [13]
    Пиши через атрибуты, !предварительно! Указав кодировку.
    Также косяки в данных хорошо выявляет w3c-XML validator
 
Конференция "Базы" » XML parse error [D7, MSSQL]
Есть новые Нет новых   [119980   +247][b:0][p:0.004]