Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.16.69.143] |
|
Страницы: (3) 1 2 [3] все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
А как же?
Цитата Smike @ 1) TXMLDocument (Internet Tab) Скажу сразу, парсер - отвратительный. Если даже промолчать о его "тормознутости", то в нем еще куча неудобств. Например, отсутствие текста нода или атрибута приводит к весьма нежелательным сообщениям об ошибках, вместо того, чтобы "вежливо промолчать" и возвратить пустую строку. Это вынуждает программиста производить проверку на наявность атрибута или текста нода, что тоже сильно сказывается на производительности. Можно еще ставить try..except, но от этого не становится легче, особенно на этапе проектирования. Одним словом, код получается более громоздким и непонятным. |
Сообщ.
#32
,
|
|
|
tyoma_first, я не опровергаю своих собственных слов по поводу TXMLDocument, но все таки нужно вставить одно "но": если не использовать биндинги. Если их использовать и документ должен быть определенной четкой структуры, то TXMLDocument — просто конфетка. Собственно, в коде его использование совершенно не видно. С помощью мастера XML Data Binding Wizard получаем интерфейс и используем его в коде.
Но использовать XML Document для больших документов неопределенной структуры я бы без особенной надобности не стал. |
Сообщ.
#33
,
|
|
|
Oк, спасибо. Мне как раз нужно использовать документы четко определенной структуры.
|
Сообщ.
#34
,
|
|
|
procedure TForm1.bbReadXMLClick(Sender: TObject); var XMLDoc: TXMLDocument; Node,NodeSvc: IXMLNode; i,j:Integer; begin CoInitialize(nil); XMLDoc:= TXMLDocument.Create(nil); XMLDoc.LoadFromFile(ExtractFilePath(Application.ExeName)+'otvet.xml'); XMLDoc.Active := true ; Node := XMLDoc.DocumentElement.ChildNodes[0]; У меня на последней из приведенных строк выскакивает окошко с таким содержимым: --------------------------- Debugger Fault Notification --------------------------- Project C:\Program Files\Borland\Delphi7\Projects\XMLproga\MyXML.exe raised too many consecutive exceptions: 'access violation at 0x00000000: read of address 0x00000000'. Process Stopped. Use Step or Run to continue. --------------------------- OK Help --------------------------- Что неправильно? XML-файл: <Provs_Lst> <Prov id="1"> <name>Поставщик_1</name> <Prov_Svcs> <Svc id="1"> <Svc_Name>Вид_оплаты_1</Svc_Name> <min_amount>1000</min_amount> </Svc> <Svc id="2"> <Svc_Name>Вид_оплаты_2</Svc_Name> <min_amount>1000</min_amount> </Svc> </Prov_Svcs> </Prov> <Prov id="5"> .... аналогичное заполнение.... </Prov> <Provs_Lst> Так понимаю, та злополучная строка должна ссылаться на блок <Prov id="1"> ... </Prov> ? WinXP_sp2, Delphi 7 |
Сообщ.
#35
,
|
|
|
Smike
Очень хочется от тебя услышать совета по выбору класса или компонента или еще чего-нить, для работы с XML. Ситуация такова: 1. Работа в памяти 2. Динимическое создание документа, с указанием новых значений. Интервал обновления может быть, раз в 1 сек. Кол-во параметров не более 500 3. Созданный динамично XML-документ передается через сеть подключенным и клиентам, и выдается им по запросу от них, к примеру после посылки команды: 'Data' или 'Init' Кол-во клиентов может быть до 100 одновременно сидящих на данной Проге. Я останавливаюсь на TjanXMLParser2, но друг активно уверяет,что мол TXMLParser еще лучше. Прошу помощи в выборе метода работы с XML. |
Сообщ.
#36
,
|
|
|
Мое мнение таково: если документ четко структурирован, то намного удобнее будет связка TXMLDocument + биндинг. Кроме того в таком режиме TXMLDocument работает очень быстро.
Если же документ может иметь произвольную структуру (хотя это довольно редкий случай для программно-генерируемых документов), то тогда можно выбрать и другой парсер. К сожелению немогу ничего сказать о стабильности работы TjanXMLParser2, т.к. кроме этого теста больше нигде его не использовал. Да и после TECXMLParser перешел на TXMLDocument с использованием биндингов. Кстати идея. Неплохо бы сравнить производительность TXMLDocument + биндинги с другими парсерами |
Сообщ.
#37
,
|
|
|
Меня волнует вопрос быстродействия!
Причина: Мое ПО будет запускаться на машине где 1) работает другая, довольно серьезная SCADA-система и она ресурсоемка. 2) Завесить или затормозить по вине моего ПО, просто недопустимо, иначе пропажа данных и меня на британский флаг ... это... самое .. ))) Почему может зависнуть или упасть? Как я уже писал мое ПО: 1. Каждому клиенту приславшему строку 'data' или 'init' выдать данные, данных может быть до 500, а таких клиентов может быть до 100, причем может случиться так, что одновременно все 100 клиентов пришлют запросы! Вот тут то и будет момент истины и мое ПО должно выйти из этого положения с честью! Вопрос: К быстро создать XML документ, одного из ниже приведенных типов: по команде 'Init': <?xml version="1.0" encoding="utf-8"?> <init> <parameter id="" name=""/> </init> по команде 'Data': <data FormatTimestamp="yyyy-mm-dd hh:nn:ss"> <Parameter id="" timestamp="" value="" state=""/> </data> |
Сообщ.
#38
,
|
|
|
Цитата malor @ Project C:\Program Files\Borland\Delphi7\Projects\XMLproga\MyXML.exe raised too many consecutive exceptions: 'access violation at 0x00000000: read of address 0x00000000'. Process Stopped. Use Step or Run to continue. --------------------------- OK Help --------------------------- у меня аналогичная проблема,имеется проект под Delphi 2009, ранее всё работало, однако переустановил ОС, и поставил новый Delphi 2009. В коде ничего не менялось с тех пор, как в последний раз работало. Теперь при работе выскакивает сообщение raised too many consecutive exceptions...access violation Обнаружил источник Имеется класс TRecordset, работающий с базой данных, в одном методе MapFields заполняется словарь имён параметров, передаваемых базе procedure TRecordset.MapFields; var i: integer; str : string; begin FieldMap.Clear; if VarIsEmpty(FDataset) then exit; for I := 0 to FDataset.Fields.Count - 1 do begin str := VarToStr(Fields(I).Name); FieldMap.Add(str, I); //********** end; end; где FieldMap: TDictionary<string,integer>; FDataset: OleVariant; класс создаётся обычно TRecordset.Create проблема в том, что если класс использовать вторично, т.е. не высвободить после однократного обращения к базе, то возникает эта ошибка(на строке отмеченой //**********), если же сделать TRecordset.Free, а потом снова TRecordset.Create и сделать запрос, то проблемы нет и всё отрабатывает успешно. Но дело в том, что ранее не надо было высвобождать его, а посылать несколько запросов, пользуясь одним экземпляром. Параметры str и I адекватные. Так у меня по всей программе, не хочется переписывать, да и это будет неправильно. Подскажите, в чем может быть проблема, как докопаться, что не нравится классу справочника FieldMap ? |
Сообщ.
#39
,
|
|
|
Юзаю для своих проектов SimpleXML, который здорово допилил в плане юникода, поддержки кодировок, оптимизации и прочего. Построен на интерфейсах, что вначале непривычно, зато не нужно освобождать объекты.
|