【发布时间】:2014-08-20 19:49:07
【问题描述】:
当我尝试使用 Dataset 和 READ-XML 方法从 XML 读取到 TempTables 时,它可以正常工作。 但问题是这样的:如果标签中有属性,那么它返回空结果而不是元素值。尝试了不同的方法,但没有得到任何结果。
我发现它只有在属性名称是“xmlns”时才有效,就像在这种情况下Reading XML file to Dataset in Progress-4gl。
这是我的代码和 XML。
<?xml version="1.0" encoding="ISO-8859-15"?>
<?xml-stylesheet type="text/xsl" href="Test.xsl"?>
<ReceiverInfo Version="2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Test.xsd">
<MessageDetails>
<MessageTypeCode Axmlns="">RECEIVERINFO</MessageTypeCode>
</MessageDetails>
<MessageDetails>
<MessageTypeCode Axmlns="">RECEIVERINFO2</MessageTypeCode>
</MessageDetails>
</ReceiverInfo>
和代码:
def var icount as int no-undo initial 0.
DEF TEMP-TABLE ReceiverInfo NO-UNDO
FIELD foo AS LOG.
DEF TEMP-TABLE MessageDetails NO-UNDO
FIELD MessageTypeCode as CHAR XML-NODE-TYPE "Element".
DEF DATASET data FOR ReceiverInfo, MessageDetails.
DATASET data:READ-XML("file", "/home/ars/temp/tofile.xml", "empty", ?, FALSE, ?, "IGNORE") NO-ERROR.
DO icount = 1 TO ERROR-STATUS:NUM-MESSAGES:
DISP ERROR-STATUS:GET-MESSAGE(icount) format "x(50)".
END.
FOR EACH MessageDetails.
DISP MessageDetails.MessageTypeCode format "x(40)".
END.
感谢您的帮助!
【问题讨论】:
-
我想知道您的 XML 是否已损坏。 Axmlns="" 部分真的应该类似于 xmlns:something="" 吗? xmlns 是“xml 命名空间前缀”。从您的代码中删除 Axlmns="" ,它基本上可以工作。
-
是的,我知道如果我删除该属性,它会起作用。例如,Axmlns 就在那里,对于真实数据,它可能类似于 MessageType="type"。问题是当属性存在时我无法获得任何值/
标签: xml progress-4gl openedge