在ABL中使用DOM构造XML节点

时间:2014-07-03 18:42:55

标签: xml dom progress-4gl

我正在使用ABL创建XML文件。我希望详细信息节点低于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 个答案:

答案 0 :(得分: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").

从您不受欢迎的输出示例中,我猜您正在附加&#34;详细信息&#34;首先是元素到标题。如果你想在field3之后使用它,你需要在追加field3之后追加它。或者你可以使用INSERT-BEFORE()方法而不是APPEND(),如果你要么踩着小部件树&#34;到适当的点或保持适当的指针。