powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Xml.OmniXmlDom форматирование
16 сообщений из 16, страница 1 из 1
Xml.OmniXmlDom форматирование
    #39993506
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть вложенность, то первый подчиненный узел следует за родительским узлом в одной строке (почти всегда).

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  xml := TXMLDocument.Create(nil);
  xml.Active := true;
  xml.Encoding := 'utf-8';
  xml.Options := [doNodeAutoIndent];// форматирование
...
...
 RootNode := xml.AddChild('feed', '');
 xmlNewProp(RootNode, 'xmlns',  xmlns);
 xmlNewChild(RootNode, 'generation-date', StringReplace(FormatDateTime('YYYY-MM-DD!hh:mm:ss', now) + '+' + GetTimeZone, '!', 'T', []));

         while not fibDS.Eof do
         begin
         try
            idObj := fibDS.FBN('id').AsInteger;

            NodeOffer := xmlNewChild(RootNode, 'offer', '');
            xmlNewProp(NodeOffer, 'internal-id', fibDS.FBN('id').AsString);

            xmlNewChild(NodeOffer, 'internal_type_id', fibDS.FBN('ID_TYPE').AsString);

            xmlNewChild(NodeOffer, 'type', GetType);
...


это баг или фича?
как это побороть?
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993510
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
(почти всегда).


вот здесь видно, что generation-date не в одну c корневым feed, хотя generation-date подчиненный по отношению к feed
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993513
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот еще пример
Код: pascal
1.
2.
NodePriceRoot := xmlNewChild(NodeOffer, 'price', '');
xmlNewChild(NodePriceRoot, 'value', value);
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993516
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще может быть опция по политике CRLF при форматировании, поищите. Посмотрите сперва в выходе, как там строки переносятся? Может, это не пробелы, а одиночные LF.
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993517
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я неправильно добавляю дочерние узлы?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
function xmlNewChild(Parent: IXMLNode; const Name, Content: string): IXMLNode;
begin

  try
    result := Xml.CreateElement(name, '');
    result.Text := Content;

    Parent.ChildNodes.Add(result);
  except
...
...
  end;
end;


я заметил, что проблема проявляется, если result.Text пустое
как здесь
Код: pascal
1.
xmlNewChild(RootNode, 'offer', '');
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993520
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если текст непустой, как результат выглядит?
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993593
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так - синим
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993596
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как - так? Вопрос - что будет, если элементу offer добавить непустой текст? Ведь у вас с этим элементом проблемы.
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993599
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, проблему решил так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function xmlNewChild(Parent: IXMLNode; const Name, Content: string): IXMLNode;
begin

  try
    result := Xml.CreateElement(name, '');
    
    if not Content.IsEmpty then
      result.Text := Content;

    Parent.ChildNodes.Add(result);
  except
...
...
  end;
end;
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993639
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
как это побороть?
А зачем это бороть? Эти XML
Код: xml
1.
<a><b/></a>

и
Код: xml
1.
2.
3.
<a>
  <b/>
</a>

идентичны
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993648
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

не зря же придумали форматирование?
на время дебага очень удобно
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993666
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
не зря же придумали форматирование?
Ты отличай данные и отображение данных. XML - это чистые данные
X11
на время дебага очень удобно
Это 7150561 не подойдет?
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993667
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже написал, что решил проблему.


_Vasilisk_
Это 7150561 не подойдет?

насколько я понял, там у тебя просто замена на перенос строки, а это не очень красиво, если есть вложенность
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993746
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
там у тебя просто замена на перенос строки
Дальше MSXML сам форматирует с учетом вложенности
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39993773
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

OmniXml
...
Рейтинг: 0 / 0
Xml.OmniXmlDom форматирование
    #39994093
Hammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Может я неправильно добавляю дочерние узлы?

Мож я чето не понимаю:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function xmlNewChild(Parent: IXMLNode; const Name, Content: string): IXMLNode;
begin
  try
    Result := Parent.AddChild(Name);
    if not Content.IsEmpty then
      Result.Text := Content;
  except
...
...
  end;
end;
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Xml.OmniXmlDom форматирование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]