我正在使用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。
我在这里缺少什么吗?
提前致谢!
答案 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;