Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Kol XMLParser :raise Exception.CreateCustomFmt [Delphi, Windows]


RusSun ©   (23.01.18 20:46

Доброе время суток.
Пробую использовать unit XMLParser;

тестю вот с таким xml.

- <xml>
 <Information Type="FiltersAndStyles" DateExported="01_22_18_10_59_14" />
- <Filters>
 <PFilters />
- <UserFilters>
- <Filter Name="P-0" FullPath="My Filters\P-0" Category="0" FilterType="Simple" Ignore="False">
 <FilterDef Type="Sys" ObjectPath="Puth1" IncludeNested="False" />
 <FilterDef Type="Sys" ObjectPath="Puth2" IncludeNested="False" />
 </Filter>
- <Filter Name="P-5" FullPath="My Filters\P-5" Category="0" FilterType="Simple" Ignore="False">
 <FilterDef Type="Sys" ObjectPath="Puth3" IncludeNested="False" />
 <FilterDef Type="Sys" ObjectPath="Puth4" IncludeNested="False" />
 </Filter>
- <Filter Name="P-3" FullPath="My Filters\P-3" Category="0" FilterType="Simple" Ignore="False">
 <FilterDef Type="Sys" ObjectPath="Puth5" IncludeNested="False" />
 <FilterDef Type="Sys" ObjectPath="Puth6" IncludeNested="False" />
 <FilterDef Type="Sys" ObjectPath="Puth7" IncludeNested="False" />
 <FilterDef Type="Sys" ObjectPath="Puth8" IncludeNested="False" />
 <FilterDef Type="Sys" ObjectPath="Puth9" IncludeNested="False" />
 </Filter>
- <Filter Name="P_4N" FullPath="My Filters\P_4N" Category="0" FilterType="Simple" Ignore="False">
 <FilterDef Type="Sys" ObjectPath="Puth10" IncludeNested="False" />
 <FilterDef Type="Sys" ObjectPath="Puth11" IncludeNested="False" />
 <FilterDef Type="Sys" ObjectPath="Puth12" IncludeNested="False" />
 <FilterDef Type="Sys" ObjectPath="Puth13" IncludeNested="False" />
 </Filter>
 </UserFilters>
 <CFilters />
 </Filters>
 </xml>


Нужно получить
Filter Name="P_4N из Filter Name значение Puth
...PuthN
ObjectPath="Puth" из ObjectPath значение Puth
...PuthN
Для каждого фильтра свои пути.

Все выгрузить компонент memo.

Выходит исключение:

(*834*)raise Exception.CreateCustomFmt(EParserError, SParseError, [Message, FSourceLine]);
При чтении и при загрузке.

тестовый пример :// открытие и загрузка. https://yadi.sk/d/3B1uTqs33RibsM
использую:
XMLParser.pas 24 ноября 2009 26,7 kb (не знаю насколько свежий)
err.pas 30 июня 2011 34,3 kb
kol323-x64-unofficial 16 марта 2015 2,11 MB

1) из-за чего возникает исключение?
2) какой код нужен для получения:

Filter Name="P_4N из Filter Name значение Puth ?
...PuthN
ObjectPath="Puth" из ObjectPath значение Puth ?
...PuthN
Для каждого фильтра свои пути.


RusSun ©   (30.01.18 21:29[1]

Вот что показывает отладчик:
То есть ошибка возникает при после прочтения xml
дает ошибку Линия слишком длинная !
Call Stack-Thread 2172
XMLParser. TXMLTokenizer.ErrorStr('Line too long')
XMLParser. TXMLTokenizer. Error(???)
XMLParser. TXMLTokenizer. ReadBuffer
XMLParser. TXMLTokenizer. SkipBlanks
XMLParser. TXMLTokenizer. NextToken
XMLParser. TXMLTokenizer. Create(???)
XMLParser. TXMLItem. LoadFromStream($ A06790)
XMLParser. TXMLParser. LoadFromStream(???)
XMLParser. TXMLParser.LoadFromFile('D:\PAS\...
Project 1. dickbutton1 (???, ???, ???)
KOL.TControl.DoClick
KOL. WndProcCtrl(???, ???, ???)
:00408d6c dickbutton1 + $20
KOL. TControl. WndProc(???)


Вопрос: "Что делать для исправления? ..."

Есть еще чем можно прочесть xml файл и получить необходимую информацию. Имя фильтра ObjectPath и пути из ObjectPath

Заранее спасибо.


RusSun ©   (01.02.18 20:23[2]

Ошибся, должно быть так:
Имя фильтра Name и пути из ObjectPath

Итог следующий:
(Отвечаю сам:)

Первый вопрос: -"Из-за чего возникает исключение?"

1 Модуль XMLParser работает отлично! Проблема заключалась
в структуре xml файла который я пытался открыть.
Данный файл я получаю автоматически из другой программы в результате экспорта.
Для нормального прочтения xml файла необходимы следующие условия:
1. в начале xml файла должен быть "заголовок" - <?xml version="1.0"?> или
другой можно посмотреть в XMLParser.pas
2. блоки "<...>" должны заканчиваться #13#10 -переход на другую строку.
пример
<xml>
<Information Type="FiltersAndStyles" DateExported="01_22_18_10_59_14" />
<Filters>
...
<CFilters />
</Filters>
</xml>

3.Пробелы нарушают/ (организуют) структуру xml-файла.

Второй вопрос: "какой код нужен для получения: значения Name и значения ObjectPath"

Примерный код получения параметра и его значения:

PXMLItem(XMLParser.Root.Items[0].Items[0].Items[0]).Params.LineName[1]); //имя параметра
PXMLItem(XMLParser.Root.Items[0].Items[0].Items[0]).Params.LineValue[1]); //значение параметра


Для информации можно использовать следующее
PXMLItem(XMLParser.Root.Items[0].Items[0].Items[0]).Name); // имя "блока"   PXMLItem(XMLParser.Root.Items[0].Items[0].Items[0]).Params.Text);  //  Params.Text "список параметров со значениями"


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо