【问题标题】:Reading XML file to Dataset in Progress-4gl在 Progress-4gl 中读取 XML 文件到数据集
【发布时间】:2014-02-23 01:48:18
【问题描述】:

我的XML文件是这样的

<A_VERY_VERY_LONG_TITLE xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
    <DATA_LIST>
        <DATA_LIST>         
            <ELEMENT_NO1 xmlns="">ABCDEFG_1</ELEMENT_NO1>
            <ELEMENT_NO2 xmlns="">1234567_1</ELEMENT_NO2>
            <ELEMENT_NO3 xmlns=""/>         
        </DATA_LIST>
        <DATA_LIST>
            <ELEMENT_NO1 xmlns="">ABCDEFG_2</ELEMENT_NO1>
            <ELEMENT_NO2 xmlns="">1234567_2</ELEMENT_NO2>
            <ELEMENT_NO3 xmlns="">A1B2C3D_2</ELEMENT_NO3>       
        </DATA_LIST>
        <DATA_LIST>
            <ELEMENT_NO1 xmlns="">ABCDEFG_3</ELEMENT_NO1>
            <ELEMENT_NO2 xmlns="">1234567_3</ELEMENT_NO2>
            <ELEMENT_NO3 xmlns="">A1B2C3D_3</ELEMENT_NO3>       
        </DATA_LIST>
    </DATA_LIST>
    <SOMETHING>SOME-VALUE</SOMETHING>
    <SOMETHING_ELSE>SOME-OTHER-VALUE</SOMETHING_ELSE>
</A_VERY_VERY_LONG_TITLE>

而我的代码示例

DEFINE VARIABLE lOK      AS LOGICAL NO-UNDO.

DEFINE TEMP-TABLE DATA_LIST NO-UNDO
    FIELD ELEMENT_NO1           AS CHARACTER
    FIELD ELEMENT_NO2           AS CHARACTER
    FIELD ELEMENT_NO3           AS CHARACTER   .

DEFINE DATASET DATA FOR DATA_LIST.

lOk = DATASET DATA:READ-XML("file",                /* SourceType             */
                            "C:\xmlFile.xml",      /* File                   */
                            "append",              /* ReadMode               */
                            ?,                     /* SchemaLocation         */
                            ?,                     /* OverrideDefaultMapping */
                            ?,                     /* FieldTypeMapping       */
                            ?).                    /* VerifySchemaMode       */

FOR EACH DATA_LIST:
    DISPLAY DATA_LIST.ELEMENT_NO1   FORMAT "x(20)"
            DATA_LIST.ELEMENT_NO2   FORMAT "x(20)"
            DATA_LIST.ELEMENT_NO3   FORMAT "x(20)"
    WITH WIDTH 120  .

END.

我可以成功访问 DATA_LIST 元素。但我无法访问数据 "SOMETHING""SOMETHING_ELSE" 。我也尝试为此值定义一个临时表,但它无法工作。 (我的屏幕是空的。)

感谢您的帮助。

【问题讨论】:

  • XML 总是需要一个根元素。这是 XML 规范的一部分。因此,您需要一个包含所有内容的标签。如果不存在,则 xml 文档格式错误。如果存在:发布整个文档!
  • 感谢您的帮助。 “A_VERY_VERY_LONG_TITLE”不是包含所有内容吗? (我已经更正了,它现在有一个关闭标签。)
  • 这看起来更正确!

标签: xml progress-4gl openedge


【解决方案1】:

某物和其他物超出了 Data_List 表的定义。试试这个:

DEFINE VARIABLE lOK      AS LOGICAL NO-UNDO.

DEFINE TEMP-TABLE DATA_LIST NO-UNDO
    FIELD ELEMENT_NO1           AS CHARACTER
    FIELD ELEMENT_NO2           AS CHARACTER
    FIELD ELEMENT_NO3           AS CHARACTER   .

Define Temp-Table A_VERY_VERY_LONG_TITLE no-undo
    field SOMETHING as character
    field SOMETHING_ELSE as character.

DEFINE DATASET DATA FOR DATA_LIST, A_VERY_VERY_LONG_TITLE.

lOk = DATASET DATA:READ-XML("file",                /* SourceType             */
                            "C:\xmlFile.xml",      /* File                   */
                            "append",              /* ReadMode               */
                            ?,                     /* SchemaLocation         */
                            ?,                     /* OverrideDefaultMapping */
                            ?,                     /* FieldTypeMapping       */
                            ?).                    /* VerifySchemaMode       */

FOR EACH DATA_LIST:
    DISPLAY DATA_LIST.ELEMENT_NO1   FORMAT "x(20)"
            DATA_LIST.ELEMENT_NO2   FORMAT "x(20)"
            DATA_LIST.ELEMENT_NO3   FORMAT "x(20)"
    WITH WIDTH 120  .
END.
For EACH A_VERY_VERY_LONG_TITLE:
    DISPLAY A_VERY_VERY_LONG_TITLE.SOMETHING format "x(40)"
            A_VERY_VERY_LONG_TITLE.SOMETHING_ELSE format "x(40)" 
    WITH WIDTH 220.
END.

它对我有用:)

【讨论】:

  • 很高兴能帮上忙 :)
猜你喜欢
  • 2014-08-20
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 2015-02-01
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多