Структура 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(), если вы либо "гуляете по дереву виджетов" до соответствующей точки, либо сохраняете соответствующий указатель.