Xml – пробел в начале текста узла
Модератор: Модераторы
Xml – пробел в начале текста узла
Имеется узел, например, такой:
<w:t> 123 </w:t>
Node.TextContent отдаёт “123 ”, т.е. без начальных пробелов (для таба аналогично).
Кто-нибудь знает, как это лечится?
Заранее спасибо.
Laz 9.28.2, FPC 2.2.4
<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
- Откуда: Зеленоград
Парсить надо с установленной опцией 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;
Спасибо всё заработало.
1) Но почему эта опция не по умолчанию?
2) И нельзя ли добавить все опции в ReadXMLFile(… ; PreserveWhitespace:boolean=false) т.к. приходится писать другой код, когда надо задать опции.
1) Но почему эта опция не по умолчанию?
2) И нельзя ли добавить все опции в ReadXMLFile(… ; PreserveWhitespace:boolean=false) т.к. приходится писать другой код, когда надо задать опции.
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
1) Изначально было написано криво, приходится поддерживать обратную совместимость... Впрочем, в каком-то смысле это хорошо: расходуется меньше памяти.
2) Трогать ReadXMLFile не будем, потому что опций много и все их в одну процедуру не впихнуть.
2) Трогать ReadXMLFile не будем, потому что опций много и все их в одну процедуру не впихнуть.
Я тоже достаточно много рабатал с 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
- Откуда: Зеленоград
Какое-то подобие описания имеется тут: http://wiki.freepascal.org/XML_Tutorial/ru
Sergei I. Gorelkin писал(а):Какое-то подобие описания имеется тут: http://wiki.freepascal.org/XML_Tutorial/ru
Там совсем для начинающих.
Вот как чакрой чуял, что нужно написать что вики я читал. Вот тут я отображаю XML в TTreeView. Так что как минимум с основами работы XML, я знаком, а вот про:
И сво-ва типа:
Я не знал, вот и решил может кто знает, где можно почитать об этом на русском языке.. А то что об этом написано на вики, так это вообще ничто...
Код: Выделить всё
TXMLInputSource.Create(AStream);
Parser.Parse(Src, TheDoc);И сво-ва типа:
Код: Выделить всё
Parser.Options.PreserveWhitespace := True;Я не знал, вот и решил может кто знает, где можно почитать об этом на русском языке.. А то что об этом написано на вики, так это вообще ничто...
