我正在尝试将 xml 文件导入到 SAS。 Xml 文件是 Google 对地址请求的“地理响应”。这是它的片段:
<address_component>
<long_name>1025</long_name>
<short_name>1025</short_name>
<type>street_number</type>
</address_component>
<address_component>
<long_name>Gilford Street</long_name>
<short_name>Gilford St</short_name>
<type>route</type>
</address_component>
<address_component>
<long_name>West End</long_name>
<short_name>West End</short_name>
<type>neighborhood</type>
<type>political</type>
</address_component>
<address_component>
<long_name>Vancouver</long_name>
<short_name>Vancouver</short_name>
<type>locality</type>
<type>political</type>
</address_component>
您可以获取完整的 xml 文件,在浏览器中输入以下 url:http://maps.googleapis.com/maps/api/geocode/xml?address=1025,+Gilford+Street,+Vancouver&sensor=false
我想将其转换为 SAS 数据集,如下所示:
type long_name
street_number 1025
route Gilford St
neighborhood West End
etc
正如您所看到的,一些 (address_component) 元素内部只有一个 (type) 元素(如 street_number 或路线),但其他元素有两个:第一个具有感兴趣的值(例如“neighborhood”),第二个具有值“政治”,我不需要。
因此,我使用函数 POSITION()=1 在 XML Mapper 中创建了 XML-map,以确保仅使用第一次出现的 (type)-标签:
<NAMESPACES count="0"/>
<!-- ############################################################ -->
<TABLE name="GeoResponse">
<TABLE-PATH syntax="XPath">/GeocodeResponse/result/address_component</TABLE-PATH>
<COLUMN name="type">
<PATH syntax="XPath">/GeocodeResponse/result/address_component/type[position()=1]</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>27</LENGTH>
</COLUMN>
<COLUMN name="long_name">
<PATH syntax="XPath">/GeocodeResponse/result/address_component/long_name</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>17</LENGTH>
</COLUMN>
</TABLE>
它在 XML Mapper 本身中正常工作(在“表视图”选项卡中)。但是,当我在 SAS EG 或 SAS Base 中使用此映射运行代码时,“类型”列为空。
如果我不在地图中使用 POSITION()=1,那么一切都会正常运行(但对于除 strett_number、route 和 postal_code 之外的所有项目,我的类型都是“政治”,而不是“城市”、“国家”等) 。
有人知道问题出在哪里吗?