Структура XML-узлов с использованием DOM в ABL

Я создаю файл XML с использованием ABL. Я хочу, чтобы узел детализации упал ниже field3 следующим образом:

+<root>
     +<header>
        <field1>some data</field1>
        <field2>some data</field2>
        <field3>some data</field3>
       +<detail>
           <field4>some data</field4>
        </detail>
      </header>
  </root> 

Тем не менее, это то, что происходит, когда файл XML сохраняется. Деталь попадает прямо под заголовок узла.

+<root>
     +<header>
       +<detail>
           <field4>some data</field4>
        </detail>
        <field1>some data</field1>
        <field2>some data</field2>
        <field3>some data</field3>
      </header>
  </root>

Есть ли способ, который я могу использовать, или конкретный способ, которым мне нужно упорядочить / структурировать свой код для достижения этой цели?

Вот код для создания узла:

hDoc:CREATE-NODE(hRoot,"root","ELEMENT").
hDoc:APPEND-CHILD(hRoot).

hDoc:CREATE-NODE(hHeader,"header","ELEMENT").
hRoot:APPEND-CHILD(hHeader).

hDoc:CREATE-NODE(hDetail,"detail","ELEMENT").
hHeader:APPEND-CHILD(hDetail).

Я добавляю значение для узла детали после поля 1-3.

Любая помощь будет оценена.

Благодарю.

1 ответ

Если я понимаю ваш вопрос, это похоже на то, что вы описываете:

define variable hDoc    as handle no-undo.
define variable hRoot   as handle no-undo.
define variable hHeader as handle no-undo.
define variable hDetail as handle no-undo.
define variable hField  as handle no-undo.

create x-document hDoc.
create x-noderef  hRoot.
create x-noderef  hHeader.
create x-noderef  hDetail.
create x-noderef  hField.

hDoc:CREATE-NODE(hRoot,"root","ELEMENT").
hDoc:APPEND-CHILD(hRoot).

hDoc:CREATE-NODE(hHeader,"header","ELEMENT").
hRoot:APPEND-CHILD(hHeader).

hDoc:CREATE-NODE(hField,"field1","ELEMENT").
hHeader:APPEND-CHILD(hField).

hDoc:CREATE-NODE(hField,"field2","ELEMENT").
hHeader:APPEND-CHILD(hField).

hDoc:CREATE-NODE(hField,"field3","ELEMENT").
hHeader:APPEND-CHILD(hField).

hDoc:CREATE-NODE(hDetail,"detail","ELEMENT").
hHeader:APPEND-CHILD(hDetail).

hDoc:CREATE-NODE(hField,"field4","ELEMENT").
hDetail:APPEND-CHILD(hField).

hDoc:save("file","test.xml").

Из вашего нежелательного примера вывода я бы предположил, что вы сначала добавляете элемент "detail" в заголовок. Если вы хотите его после field3, вам необходимо добавить его после добавления field3. Или вы можете использовать метод INSERT-BEFORE(), а не APPEND(), если вы либо "гуляете по дереву виджетов" до соответствующей точки, либо сохраняете соответствующий указатель.

Другие вопросы по тегам