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

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

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

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

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

Сообщение qqqq1 »

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

Laz 9.28.2, FPC 2.2.4
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Парсить надо с установленной опцией 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;
qqqq1
новенький
Сообщения: 12
Зарегистрирован: 20.08.2010 13:01:46

Сообщение qqqq1 »

Спасибо всё заработало.
1) Но почему эта опция не по умолчанию?
2) И нельзя ли добавить все опции в ReadXMLFile(… ; PreserveWhitespace:boolean=false) т.к. приходится писать другой код, когда надо задать опции.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

1) Изначально было написано криво, приходится поддерживать обратную совместимость... Впрочем, в каком-то смысле это хорошо: расходуется меньше памяти.
2) Трогать ReadXMLFile не будем, потому что опций много и все их в одну процедуру не впихнуть.
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Сообщение Maxizar »

Я тоже достаточно много рабатал с 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;


А есть ли более детально как с этим работать на русском языке?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Какое-то подобие описания имеется тут: http://wiki.freepascal.org/XML_Tutorial/ru
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

Там совсем для начинающих. :) Если будут пожелания раскрыть подробнее какой-то вопрос, то можно добавить.
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Сообщение Maxizar »

Вот как чакрой чуял, что нужно написать что вики я читал. Вот тут я отображаю XML в TTreeView. Так что как минимум с основами работы XML, я знаком, а вот про:

Код: Выделить всё

TXMLInputSource.Create(AStream);
Parser.Parse(Src, TheDoc);

И сво-ва типа:

Код: Выделить всё

Parser.Options.PreserveWhitespace := True;

Я не знал, вот и решил может кто знает, где можно почитать об этом на русском языке.. А то что об этом написано на вики, так это вообще ничто...
Ответить