使用SAS 9.2从Web服务检索值数组

时间:2011-01-19 14:09:30

标签: web-services sas

我正在使用SAS 9.2并尝试从.NET Web服务检索长值数组。这是我的设置和电话:

filename websvc url 'http://path.to/my/webservice?WSDL';
libname websvc xml92 xmltype=WSDL;

Data d;
    dataSchema = "blah";
    module = "blah";
run;

data strata;
    SET websvc.GetStrataForModuleResponse(parms=d);
run;

当我在没有SAS的情况下手动调用它时,webservice会像这样返回XML:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfLong>
   <long>1</long>
</ArrayOfLong>

注意我从上面的代码段中剪切了xmlns内容。

当我从SAS调用Web服务时,我得到一个包含1个变量和1个观察值的数据集。变量的名称是“datatype = string”,值为空。有了这些参数,我应该完全按照上面的说法回复。

我希望看到一个带有1个变量和1个观测值的数据集,其中变量名为long,观察值为1。

我在这里缺少什么吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

SAS libname引擎在结构上是非常受限制的。如果您的XML不符合所需的结构,则需要创建XML以告知SAS如何读取XML文件。最简单的方法是使用SAS XML Mapper。对于您当前的服务,XML映射将如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<SXLEMAP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="webservice" version="1.2" xsi:noNamespaceSchemaLocation="http://www.sas.com/xml/schema/sxle12.xsd">
    <TABLE name="ArrayOfLong">
        <TABLE-PATH syntax="XPath">/ArrayOfLong</TABLE-PATH>
        <COLUMN name="long">
            <PATH syntax="XPath">/ArrayOfLong/long</PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>integer</DATATYPE>
        </COLUMN>
    </TABLE>
</SXLEMAP>

在SAS代码中,您应该向地图添加一个filename语句,并将地图添加到您的libname语句中。

filename wdslmap 'webservice.map';
libname websvc xml92 xmltype=WSDL xmlmap=wdslmap;