Xml – пробел в начале текста узла

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

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

Xml – пробел в начале текста узла

Сообщение qqqq1 » 21.02.2011 12:10:35

Имеется узел, например, такой:
<w:t> 123 </w:t>
Node.TextContent отдаёт “123 ”, т.е. без начальных пробелов (для таба аналогично).
Кто-нибудь знает, как это лечится?
Заранее спасибо.

Laz 9.28.2, FPC 2.2.4
qqqq1
новенький
 
Сообщения: 12
Зарегистрирован: 20.08.2010 13:01:46

Re: Xml – пробел в начале текста узла

Сообщение Sergei I. Gorelkin » 21.02.2011 12:30:51

Парсить надо с установленной опцией PreserveWhitespace:

Код: Выделить всё
procedure TMyObject.DOMFromStream(AStream: TStream);
var
  Parser: TDOMParser;
  Src: TXMLInputSource;
  TheDoc: TXMLDocument;
begin
  try
    Parser := TDOMParser.Create;
    Src := TXMLInputSource.Create(AStream);
    Parser.Options.PreserveWhitespace := True;
    Parser.Parse(Src, TheDoc);
  finally
    Src.Free;
    Parser.Free;
  end;
end;
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Xml – пробел в начале текста узла

Сообщение qqqq1 » 21.02.2011 14:15:19

Спасибо всё заработало.
1) Но почему эта опция не по умолчанию?
2) И нельзя ли добавить все опции в ReadXMLFile(… ; PreserveWhitespace:boolean=false) т.к. приходится писать другой код, когда надо задать опции.
qqqq1
новенький
 
Сообщения: 12
Зарегистрирован: 20.08.2010 13:01:46

Re: Xml – пробел в начале текста узла

Сообщение Sergei I. Gorelkin » 21.02.2011 15:29:23

1) Изначально было написано криво, приходится поддерживать обратную совместимость... Впрочем, в каком-то смысле это хорошо: расходуется меньше памяти.
2) Трогать ReadXMLFile не будем, потому что опций много и все их в одну процедуру не впихнуть.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Xml – пробел в начале текста узла

Сообщение Maxizar » 21.02.2011 17:48:19

Я тоже достаточно много рабатал с XML в одной программке по диплому. Я в XML файлах хранил структуру диэлектрических стекол, толщина, ширина....
Но вот об этом даже не знал:
Код: Выделить всё
procedure TMyObject.DOMFromStream(AStream: TStream);
var
  Parser: TDOMParser;
  Src: TXMLInputSource;
  TheDoc: TXMLDocument;
begin
  try
    Parser := TDOMParser.Create;
    Src := TXMLInputSource.Create(AStream);
    Parser.Options.PreserveWhitespace := True;
    Parser.Parse(Src, TheDoc);
  finally
    Src.Free;
    Parser.Free;
  end;
end;


А есть ли более детально как с этим работать на русском языке?
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Xml – пробел в начале текста узла

Сообщение Sergei I. Gorelkin » 21.02.2011 18:26:18

Какое-то подобие описания имеется тут: http://wiki.freepascal.org/XML_Tutorial/ru
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Xml – пробел в начале текста узла

Сообщение Vadim » 21.02.2011 18:45:22

Sergei I. Gorelkin писал(а):Какое-то подобие описания имеется тут: http://wiki.freepascal.org/XML_Tutorial/ru

Там совсем для начинающих. :) Если будут пожелания раскрыть подробнее какой-то вопрос, то можно добавить.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Xml – пробел в начале текста узла

Сообщение Maxizar » 21.02.2011 19:58:33

Вот как чакрой чуял, что нужно написать что вики я читал. Вот тут я отображаю XML в TTreeView. Так что как минимум с основами работы XML, я знаком, а вот про:
Код: Выделить всё
TXMLInputSource.Create(AStream);
Parser.Parse(Src, TheDoc);

И сво-ва типа:
Код: Выделить всё
Parser.Options.PreserveWhitespace := True;

Я не знал, вот и решил может кто знает, где можно почитать об этом на русском языке.. А то что об этом написано на вики, так это вообще ничто...
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 45

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