将 XML 文件读取到 Progress-4gl 中的临时表



我正在使用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文件?

这似乎是一个已知的错误,我找到了它的知识库条目: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.

我加载了数据集。

最新更新