xml-node-type = 'hidden' 如何在循环中发挥作用

问题描述 投票:0回答:1

我正在编写 Progress 4GL 代码,该代码使用一个临时表 tt_address 基于多个限定符(例如供应商、买家、发票发行人和交付方)构建 XML 地址标签。

对于每个地址,我们都有街道 1,2 和 3。如果可用,我想在 XML 中显示它们,否则隐藏标签。

下面是我的代码。

do i = 1 to num-entries(qualifiers):
create tt_address.
if ad_line1 <> ""
buffer tt_address:buffer-field("tt_address_street1"):xml-node-name = "STREET_1".
tt_address_street1   = trim(ad_line1).
else
buffer tt_address:buffer-field("tt_address_street1"):xml-node-type = "hidden".
if ad_line2 <> ""
buffer tt_address:buffer-field("tt_address_street2"):xml-node-name = "STREET_2".
tt_address_street2   = trim(ad_line2).
else
buffer tt_address:buffer-field("tt_address_street2"):xml-node-type = "hidden".
if ad_line3 <> ""
buffer tt_address:buffer-field("tt_address_street3"):xml-node-name = "STREET_3".
tt_address_street3   = trim(ad_line3).
else
buffer tt_address:buffer-field("tt_address_street3"):xml-node-type = "hidden".
end.

问题:- 在上面的情况下,如果第一个循环通过像 ad_line1 <> '' 和 ad_line2 & ad_line3 = '' 这样的条件,那么它会返回下面 '地址1XXXXX'

在第二个循环中(即,对于其他限定符)如果我有 ad_line1 <> '' 和 ad_line2 = '' & ad_line3 <> '' 那么它仍然只给出 ad_line1 如下 '地址2XXXXX'

请告诉我,如何通过不对每个地址标签使用单独的临时表来克服这个问题。

希望能澄清!!!

我的分析:-由于第一次迭代将 tt_address_street2 和 tt_address_street3 设为“隐藏”,因此即使它们具有信息,也只会将下一次迭代视为隐藏。

我所做的操作:-对于每个循环开始,我将所有 tt_address_street 标签的节点类型设置为“element”,如下所示 缓冲区 tt_address:缓冲区字段(“tt_address_street2”):xml-node-type =“元素”。 还观察到它正在为 tt_address_street2 分配值,但在 XML 生成中,除了 信息之外,我看不到该值。

xml openedge progress-4gl
1个回答
0
投票

如果我正确理解您的要求,则使用 xml-node-type 属性不可能做到这一点。该属性是在缓冲区级别设置的,而不是在记录级别设置的。它在临时表或 ProDataset 上调用 WRITE-XML 时适用于该表中的所有记录。

如果您的要求是从输出中跳过空的 xml 元素,您是否尝试使用最后一个可选参数 ob WRITE-XML - 省略初始值

当设置为 TRUE 时,当与初始值匹配时,那些具有空值的字符字段将不会写入 XML 文档。

© www.soinside.com 2019 - 2024. All rights reserved.