我需要从URL读取XML文件。如果文件存在,我没有问题。然后我使用SAX阅读器解析它。
现在我需要从URL读取一个XML文件 - 两次。
首次需要从http://someurl/paging$1,1
获取,然后从文档头部的total-items
中提取值。
之后,我需要从同一个网址获取XML,只有最后1
替换为来自total-items
的值。通过这种方式,我可以获得所有可用的项目。
现在我已经在开始时难过了。如何从URL读取XML?我看到有一个READ-XML()选项,但是它将它存储在临时表中。
使用Progress Openedge ver。 11
答案 0 :(得分:2)
READ-XML要求XML数据位于存储区域,例如LONGCHAR,MEMPTR,FILE或句柄。
为了在您的应用程序中使用此功能,您需要将xml有效负载d / l到其中一个存储区域,然后将其读入。
一种可能性是创建SOCKET,使用套接字对http请求执行“get”调用,读取对MEMPTR的响应,然后将数据READ-XML到TT中。
另一个选择是使用“curl”(http://curl.haxx.se/)将XML数据传递到READ-XML存储区域,然后以这种方式解析XML文件。
答案 1 :(得分:2)
对于" raw" xml支持您可以使用X-DOCUMENT句柄。
DEFINE VARIABLE hXDoc AS HANDLE NO-UNDO.
CREATE X-DOCUMENT hXDoc.
hXDoc:LOAD("file","http://someurl/paging$1,1", TRUE).
/* Here you need to parse */
DELETE OBJECT hXDoc.
根据xml文档的结构,您可以将READ-XML与临时表或数据集一起使用,以将数据直接加载到其中。但是之后您需要先定义数据集。这通常不适合动态创建的项目。
查看xml here
周围的文档如果所有事情都失败了,你可以包括像curl或wget这样的os实用程序(关于Tims的回答)。围绕wget的简单包装可能看起来像这样(curl会类似):
DEFINE INPUT PARAMETER pcUrl AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcPrefix AS CHARACTER NO-UNDO.
DEFINE OUTPUT PARAMETER pcFile AS CHARACTER NO-UNDO.
pcFile = "wget." + pcPrefix + "." + STRING(TODAY,"999999") + REPLACE(STRING(TIME,"HH:MM:SS"),":","") + "-" + STRING(RANDOM(0,1000),"9999").
OS-COMMAND SILENT VALUE("wget '" + pcUrl + "' -o /dev/null -O /tmp/" + pcFile).