Конференция "KOL" » Kol XMLParser :raise Exception.CreateCustomFmt [Delphi, Windows]
 
  • RusSun © (23.01.18 20:46) [0]
    Доброе время суток.
    Пробую использовать 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 "список параметров со значениями"

 
Конференция "KOL" » Kol XMLParser :raise Exception.CreateCustomFmt [Delphi, Windows]
Есть новые Нет новых   [118461   +17][b:0][p:0.002]