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

发布于 2024-10-13 10:54:51 字数 733 浏览 3 评论 0原文

我正在使用 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 的情况下手动调用 Web 服务时,它会返回这样的 XML:

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

注意我从上面的代码片段中截取了 xmlns 内容

当我从 SAS 调用 Web 服务时,我得到一个包含 1 个变量和 1 个观察值的数据集。变量的名称为“datatype=string”,值为空。有了参数,我应该准确地返回我在上面看到的内容。

我希望看到一个包含 1 个变量和 1 个观察值的数据集,其中变量被命名为 long,观察值是 1。

我在这里缺少什么吗?

提前致谢!

I'm using SAS 9.2 and trying to retrieve an array of long values from a .NET web service. Here is my setup and call:

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;

The webservice returns XML like this when I invoke it manually without SAS:

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

note I snipped the xmlns stuff from the above snippet.

When I call the web service from SAS I get a dataset with 1 variable and 1 observation. The name of the variable is "datatype=string" and the value is blank. With the parameters I should get back exactly what I see above.

I would expect to see a dataset with 1 variable and 1 observation where the variable is named long and the value of the observation is 1.

Is there something I am missing here?

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

胡渣熟男 2024-10-20 10:54:51

SAS libname 引擎在结构要求方面受到很大限制。如果您的 XML 不符合所需的结构,您需要创建一个 XML 来告诉 SAS 如何读取 XML 文件。最简单的方法是使用 SAS XML 映射器。对于您当前的服务,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 代码中,您应该将文件名语句添加到映射中,并将映射添加到 libname 语句中。

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

The SAS libname engine is very restricted in the structure is requires. If your XML is not conform the required structure you need to create an XML to tell SAS how to read the XML file. The easiest way to do this is by using the SAS XML Mapper. For you current service the XML map would be like this:

<?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>

In your SAS code you should add a filename statement to your map and add the map to your libname statement.

filename wdslmap 'webservice.map';
libname websvc xml92 xmltype=WSDL xmlmap=wdslmap;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文