【问题标题】:Reading XML file to Temp-table in Progress-4gl在 Progress-4gl 中读取 XML 文件到临时表
【发布时间】:2017-10-23 13:44:38
【问题描述】:

我正在使用 OpenEdge 10.2A

我的 XML 文件只有一个 TABLE_NAME 记录,它有很多字段,但简化版本是:

<Table_Name>
    <Field_Name_1>Value_1</Field_Name_1>
    <Field_Name_2>Value_2</Field_Name_2>
</Table_Name>

为了阅读,我使用了代码:

DEFINE TEMP-TABLE Table_Name NO-UNDO
    FIELD Field_Name_1 AS CHAR
    FIELD Field_Name_2 AS CHAR
.

TEMP-TABLE Table_Name:READ-XML("File","C:\myFile.xml","empty",?,?,?,?).

DEF VAR i AS INT NO-UNDO.
FOR EACH Table_Name: 
    i=i + 1.
END.
DISP i.

它显示 0(零)作为结果,这意味着它不读取文件中的 XML 记录。

如果我按如下方式更改我的 XML 文件:

<My_XML_Records>
      <Table_Name>
          <Field_Name_1>Value_1</Field_Name_1>
          <Field_Name_2>Value_2</Field_Name_2>
      </Table_Name>
</My_XML_Records>

同样的代码显示1(一)

由于XML文件是由其他程序生成的,格式是固定的,有没有办法让代码正确读取XML文件?

【问题讨论】:

  • 你用的是什么版本?您获得 0 条记录的代码对我有用。也许还有其他问题?
  • 很奇怪,我们的版本是 OpenEdge 10.2A build 1185。我已经使用过程编辑器运行了该过程,并且没有更改代码,添加 My_XML_Records 标记可以提供所需的输出。你用的是哪个版本?
  • 11.7 更新了很多...可能是固定的
  • 是的,更新很多 :)

标签: xml progress-4gl


【解决方案1】:

这似乎是一个已知的错误,我找到了一个知识库条目: https://knowledgebase.progress.com/articles/Article/How-to-read-an-XML-in-a-temp-table-using-READ-XML

解决方法:在您的 XML 中,您将需要一个带有数据集名称的外部节点。像这样:

<dataset_name>
    <Table_Name>
        <Field_Name_1>Value_1</Field_Name_1>
        <Field_Name_2>Value_2</Field_Name_2>
    </Table_Name>
</dataset_name>

然后为您的临时表定义一个数据集。代码如下:

DEFINE TEMP-TABLE Table_Name 
    FIELD Field_Name_1 AS CHAR
    FIELD Field_Name_2 AS CHAR
.

define dataset dataset_name for table_name.

dataset dataset_name:read-xml("File","C:\myFile.xml","empty",?,?,?).
DEF VAR i AS INT NO-UNDO.
FOR EACH Table_Name: 
    i=i + 1.
    DISP Field_Name_1 format "x(20)" 
         Field_Name_2 format "x(20)".
END.
DISP i.

我用它加载了数据集。

【讨论】:

  • 感谢您的快速回复,因为这是一个已知的错误,我必须阅读 xml 文件并更改其结构保存并重新加载它。你的帮助很重要。再次感谢。
猜你喜欢
  • 2014-02-23
  • 2018-02-26
  • 2014-08-20
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 2021-04-16
  • 2019-01-28
  • 1970-01-01
相关资源
最近更新 更多