Помогите пожалуйста с запсью/чтеньем XML!!!!

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение qivi » 26.06.2011 14:30:06

Maxizar
Спастбо
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение BadBoyAlex » 10.08.2011 13:05:09

sign писал(а):
Vadim писал(а):sign
Во многих случаях вообще лучше использовать чисто текстовый файл с жёстко заданной последовательностью значений. :)
Согласен, что при этом может возникнуть путаница, если при составлении файла будет что-то перепутано. У меня есть программа для студентов, лабораторная работа, где исходные данные формирует преподаватель в виде текстового файла значений и пока что никаких проблем не возникало.

Суть в другом.
Суть форматов, таких как XML, JSON и других - самодокументируемость данных.

Добавлено спустя 5 минут 15 секунд:
qivi писал(а):
Vadim писал(а):sign
Во многих случаях вообще лучше использовать чисто текстовый файл с жёстко заданной последовательностью значений. :)


Сперва я использовал INI - просто и понятно, всё бы ничего, но возникли проблемы с многострочным полем, записывал он его всё, а вот считывал только первую строчку... можно было б конечно прикрутить какие ни будь педали заменяющие перенос каретки на какую нибудь комбинацию символов до записи в файл и обратно после чтения... но я просто выбрал XML.

В качестве очередного велосипеда, могу предложить делать первоначально проверку на наличие обязательных узлов в xml-файле и только после этого пытаться уже обрабатывать данный файл если он прошел проверку

Padre_Mortius, а как выглядит проверка наличия определённого узла в открытом XML файле? :oops:

Мой путь.
Но тут я удачно наткнулся на JSON.
Для вас - http://www.progdigy.com/?page_id=6

У меня при использовании этих модулей лазарь грешит на
Код: Выделить всё
TSuperObject = class;
  ISuperObject = interface;
  TSuperArray = class;
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение v-t-l » 10.08.2011 19:47:50

v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение sign » 11.08.2011 08:24:38

unit`ы Лазаруса
fpjson, jsonConf, jsonparser и т.д.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение Brainenjii » 11.08.2011 08:26:46

а где можно найти пример с использованием? ^_^'
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение hinst » 11.08.2011 13:45:54

меня лично в поддержке формата json в fcl не устраивает то, что, собственно, когда программно генерируешь файл, а потом сохраняешь его, то там никаких отступов и переводов строк в нужных местах. И мне не понятно, почему. Всё, весь текст пишется в одну длинную строку. Хотя, аналогичный компонент для xml из fcl расставляет в аналогичной ситуации отступы и переводы строк правильно.

Хорошо, отступы ставятся
Код: Выделить всё
<CONFIG once_configured="True" ad2d_primary_lib="AndorraLib.dll">
  <display width="800" height="600" windowCaption="Overkill project"/>
  <redraw fps_limit="40" threadsleep="20"/>
</CONFIG>


Плохо!, отступы нифига не ставятся
Код: Выделить всё
{ "once_configured" : True, "ad2d_primary_lib" : "AndorraLib.dll", "display" : { "width" : 800, "height" : 600, "windowCaption" : "Overkill project" }, "redraw" : { "fps_limit" : 40, "threadsleep" : 20 } }
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение qivi » 28.12.2011 11:28:46

Как узнать количество атрибутов узла чтоб перебрать их в цикле?

Если я не совсем ясно или грамотно изъясняюсь, то я вот об этих штуках:
Код: Выделить всё
XML_F2.ChildNodes.Item[0].ChildNodes.Item[0].Attributes


Добавлено спустя 18 минут 56 секунд:
Вроде нашёл:
Код: Выделить всё
XML_F2.ChildNodes.Item[0].ChildNodes.Item[0].Attributes.Length

Ожидал просто что то аналогичное определению количества дочерних узлов:
Код: Выделить всё
XML_F2.ChildNodes.Item[0].ChildNodes.Item[0].Attributes.Count
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение VinSS » 29.12.2011 05:01:54

Возникла проблема с чтением, вроде и код использую из вики:

procedure TForm1.MenuItem4Click(Sender: TObject);
var
s:string;
PassNode: TDOMNode;
Doc: TXMLDocument;
begin
ReadXMLFile(Doc, '\servertypestype_1all_filesfile_00529759file529759.xml');
PassNode := Doc.DocumentElement.FindNode(number);
s:=UTF8Encode(PassNode.TextContent);
Doc.Free;
end;

но все время получаю "SIGSEGV" на s:=UTF8Encode(PassNode.TextContent). Что я только ни делал!
Проблема судя по всему в том, что кодировка юникод (<?xml version="1.0" encoding="unicode"?>).
Как побороть, что посоветуете?

Добавлено спустя 56 минут 55 секунд:
Если просто как текстовый файл читать, то квадраты вместо текста :(
VinSS
новенький
 
Сообщения: 26
Зарегистрирован: 29.12.2011 04:23:46

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение dunin » 29.12.2011 08:15:38

VinSS писал(а):... но все время получаю "SIGSEGV" на s:=UTF8Encode(PassNode.TextContent). Что я только ни делал!
Проблема судя по всему в том, что кодировка юникод (<?xml version="1.0" encoding="unicode"?>).
Как побороть, что посоветуете?

Вот так пробовали?
Код: Выделить всё
procedure TForm1.MenuItem4Click(Sender: TObject);
var
s:string;
PassNode: TDOMNode;
Doc: TXMLDocument;
begin
ReadXMLFile(Doc, '\servertypestype_1all_filesfile_00529759file529759.xml');
PassNode := Doc.DocumentElement.FindNode(number);

if not (PassNode = nil) then //!!!!!!!!!!!!!!!!!!!!!!!!!

s:=UTF8Encode(PassNode.TextContent);
Doc.Free;
end;
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение VinSS » 29.12.2011 23:45:22

Ага, теперь хотя бы ясно куда копать: PassNode = nil всегда. Почему не понятно :(
Node 'number' точно есть! Видимо надо 'number' тоже кодировать перед поиском, а как?

Добавлено спустя 24 минуты 14 секунд:
Положил xml в папку с экзешником, пересохранил его через блокнот в UTF-8 все равно не получается :(
Что я могу принципиально неправильное делать?
VinSS
новенький
 
Сообщения: 26
Зарегистрирован: 29.12.2011 04:23:46

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение dunin » 30.12.2011 08:55:59

VinSS писал(а):...
Что я могу принципиально неправильное делать?

Да что угодно. :D
XML-ину в студию. :wink:
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение v-t-l » 30.12.2011 10:13:43

VinSS писал(а):Что я могу принципиально неправильное делать?

Например, DocumentElement.FindNode не рекурсивна и ищет только по "детям", а не по "внукам" и "правнукам".
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение leo_bsv » 30.12.2011 19:12:05

VinSS писал(а):Что я могу принципиально неправильное делать?

например ошибаться в имени файла...
Код: Выделить всё
try
  ReadXMLFile(f, FileName);
  ...
except
  ShowMessage('Я указал неправильное имя файла ;)');
end;
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение VinSS » 01.01.2012 20:47:42

dunin писал(а):XML-ину в студию.

Обрезал xml по максимому, в нем просто несколько страниц и кучи данных на них.
<?xml version="1.0" encoding="unicode"?>
<batch version="1.0" hasBlockCoordinates="true">
<page pageNumber="1" pageTemplate="v1-2">
<block blockName="SURNAME" l="110" t="521" r="1193" b="607">ИВАНОВ</block>
<block blockName="NAME" l="110" t="609" r="1195" b="695">ИВАН</block>
<block blockName="PTRNMIC_NAME" l="111" t="696" r="1196" b="782">ИВАНОВИЧ</block>
<block blockName="DOB" l="282" t="793" r="865" b="873">01.01.1950</block>
<block blockName="CITIZENSHIP" l="0" t="0" r="0" b="0">RU</block>
</page>
</batch>


v-t-l писал(а):Например, DocumentElement.FindNode не рекурсивна и ищет только по "детям", а не по "внукам" и "правнукам".

Чувствую истина где-то рядом!


leo_bsv писал(а):например ошибаться в имени файла...

Файл должен существовать, иначе кнопочка не активна.
VinSS
новенький
 
Сообщения: 26
Зарегистрирован: 29.12.2011 04:23:46

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение leo_bsv » 01.01.2012 21:39:47

VinSS писал(а):Обрезал xml по максимому, в нем просто несколько страниц и кучи данных на них.
<?xml version="1.0" encoding="unicode"?>

атрибут encoding="unicode" не обязателен.

Добавлено спустя 13 минут 4 секунды:
VinSS писал(а):s:=UTF8Encode(PassNode.TextContent);

Текст из ноды читается таким кодом:
Код: Выделить всё
s := PassNode.FirstChild.NodeValue;
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 263

Рейтинг@Mail.ru
cron