XML 映射的 PATH 元素中的 POSITION() 函数在 XML 映射器中有效,但在 SAS 代码中无效

2024-03-20

我正在尝试将 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 之外的所有项目,我的类型都是“政治”,而不是“城市”、“国家”等) 。

有人知道问题出在哪里吗?


在 SAS 9.3 上运行。版本之间的 XML 处理存在差异。

我无法获得基本地图来完成您正在寻找的任务。这position()=1看起来它绝对应该做你想做的事。

所以我写了一个小数据步骤来过滤掉“政治”行。

我让这个工作:

filename in url 'http://maps.googleapis.com/maps/api/geocode/xml?address=1025,+Gilford+Street,+Vancouver&sensor=false';

filename SXLEMAP "c:\temp\google.map";
data _null_;
file SXLEMAP;
put '<SXLEMAP name="SXLEMAP" version="2.1">';
put '<NAMESPACES count="0"/>';

put '<TABLE name="GeoResponse">';
put '    <TABLE-PATH syntax="XPath">/GeocodeResponse/result/address_component</TABLE-PATH>';

put '   <COLUMN name="type">';
*put '       <PATH syntax="XPath">/GeocodeResponse/result/address_component/type[position()=1]</PATH>';
put '        <PATH syntax="XPath">/GeocodeResponse/result/address_component/type</PATH>';
put '        <TYPE>character</TYPE>';
put '        <DATATYPE>string</DATATYPE>';
put '        <LENGTH>27</LENGTH>';
put '    </COLUMN>';

put '    <COLUMN name="long_name">';
put '        <PATH syntax="XPath">/GeocodeResponse/result/address_component/long_name</PATH>';
put '        <TYPE>character</TYPE>';
put '        <DATATYPE>string</DATATYPE>';
put '        <LENGTH>17</LENGTH>';
put '    </COLUMN>';

put '</TABLE>';
put '</SXLEMAP>';
run;

filename  google 'c:\temp\google.xml';
data _null_;
file google;
infile in;
input;
if ^index(_infile_,"political") then
   put _infile_;
run;

libname   google xmlv2 xmlmap=SXLEMAP access=READONLY;

proc print data=google.georesponse;
run;

产生这个:

             Obs    type                           long_name

               1    street_number                  1025
               2    route                          Gilford Street
               3    neighborhood                   West End
               4    locality                       Vancouver
               5    administrative_area_level_2    Greater Vancouver
               6    administrative_area_level_1    British Columbia
               7    country                        Canada
               8    postal_code                    V6G 1R2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XML 映射的 PATH 元素中的 POSITION() 函数在 XML 映射器中有效,但在 SAS 代码中无效 的相关文章

  • Inno Setup - XML 编辑 XPath 请求失败,并出现“运行时 NIL 接口异常”

    我已经为我的应用程序创建了一个 Inno Setup 脚本 其中我尝试在安装后步骤中编辑一些 XML 配置 主要是连接字符串 我有一些非常简单的 XPath 请求 但在使用时出现运行时异常selectSingleNode然而getEleme
  • 十亿笑 XML DoS 攻击是如何运作的?

    gt
  • 如果出现错误,SAS 会发送电子邮件

    是否有任何代码 宏可以合并到我的 SAS 程序中 一旦我的 SAS 代码在运行时发生错误 它就会向我发送电子邮件 另外 这封电子邮件是否可能包含所发生的错误 是的 又不是 这是可能的 但没有好的方法来做到这一点 您必须在每个过程之后检查是否
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • LinearLayout:防止最后一个孩子被之前的大文本视图推出或挤压

    我有一个LinearLayout里面有两个孩子 第一个是TextView对于动态内容 第二个是一个按钮 我的问题是按钮被推出其父级或被挤压到不再可见的程度 我想要TextView认识到其父母与第二个孩子一起没有更多空间 并开始新的一行 而不
  • 在 Word 2010 中开发功能区选项卡,在组标签名称中使用 & 符号

    我正在开发一个用于模板的功能区选项卡 MyTemplate dotm 对于 Word 2010 我的问题 我想在组的标签中使用与号 我尝试了很多方法 也用谷歌搜索了很多关于这个问题的信息 但没有任何效果 named amp decimal
  • 如何向开关对象添加/更改波纹效果

    下面是我自定义的开关 红圈是默认的波纹效果 我发现设置一个波纹可绘制作为开关的背景 控制波纹的颜色
  • 在 Sql Server 中启用 DTD 支持

    我有各种 xml 文档需要存储在数据库列中 这些文档包含对 DTD 的引用 并且 SQL Server 不会导入 xml 因为它存在安全风险 如何在数据库上启用 DTD 支持 以便它可以让我插入 xml 内容 你必须CONVERT首先 MS
  • Android 背景 + 文本 + 按钮图标

    我想要一个图像设置为文本的背景 并在文本的左侧设置一个图标 在iPhone中非常简单 但不知道如何在Android上做到这一点 调整按钮的大小并保持图标 文本的位置和距离正确 iPhone 安卓我有这个 xml代码是
  • 如何告诉 Java SAX 解析器忽略无效字符引用?

    当尝试使用字符引用解析不正确的 XML 时 例如 x1 Java 的 SAX 解析器因致命错误而惨死 例如 org xml sax SAXParseException Character reference x1 is an invalid
  • 如何在 python 中更新/修改 XML 文件?

    我有一个 XML 文档 我想在它包含数据后对其进行更新 我考虑过打开 XML 文件 a 追加 模式 问题是新数据将写入根结束标记之后 如何删除文件的最后一行 然后从该点开始写入数据 然后关闭根标签 当然 我可以读取整个文件并进行一些字符串操
  • PHP 读取 XML 播客 RSS 源

    好的 我正在为朋友的播客网站创建一个页面 列出他的播客的所有剧集 本质上 我所寻找的只是如何阅读 RSS 提要 解析出节点 并将信息显示在屏幕上 最终 我将创建一个可以播放剧集的播放器 但那是很久以后的事了 这就是我阅读 RSS 源的方式
  • DTD 与 XSD 定义的 XML 语言的范围

    下列命题是否成立 对于每个 DTD 都有一个定义完全相同的语言的 XSD 并且对于每个 XSD 都有一个定义完全相同的语言的 DTD 或者换句话说 任何 DTD 定义的语言集合正是任何 XSD 定义的语言集合 稍微扩展一下这个问题 XML
  • 合并2个XML文件并修改属性值

    我有两个 xml 文件 我想将它们合并并用一些属性进行一些算术 请提供一些想法 我正在使用标准 xslthttp informatik hu berlin de merge http informatik hu berlin de merg
  • 如何在 PHP Soap 客户端中禁用命名空间别名?

    我的 PHP Microsoft AX 集成有问题 我正在使用 SOAP WSDL 与服务集成 我遇到的问题是在从 PHP 向 WSDL 发送请求后收到此错误 无效的实例类型名称 ns3 AxdEntity DirParty DirOrga
  • 使用 java 从 XML 元素中删除空格

    我有一个 JSON 如下 String str Emp name JSON Emp id 1 Salary 20997 00 我想使用 java 将此 JSON 转换为 XML 我的 java 代码在这里 JSON json JSONSer
  • XAMARIN - 添加来自 youtube 的视频

    我搜索如何从 youtube 添加视频的信息 例如 我想从一些 YouTube 链接添加视频 我认为它应该在网络视图中 但我需要一些详细信息 因为我找不到有关我的问题的任何信息 您可以使用 webview 播放 youtube 视频 str
  • 单击“发送”按钮事件时,我们可以在哪里获取 xml/元数据格式的表单数据?

    我是一个新的 scala 学习者 作为要求的一部分 我需要将表单数据插入 activemq 队列中以进行提交事件 我尝试调试发送方法代码 以了解单击 FormRunnerActions scala 类中的发送按钮时我们到底在哪里获取 xml
  • Python配置文件生成器

    我想用Python制作一个配置文件生成器 我的大致想法是使用模板文件和一些具有真实设置的 XML 文件来提供输入 然后使用程序生成真正的配置文件 例子 template file server IP serverip server name
  • 调试 xslt 的工具

    我有一个 Java servlet 它生成 XML 使用 XSLT 样式表对其进行翻译 然后显示生成的 HTML 这是我第一次使用 XSLT 调试 XSLT 的好方法是什么 我也有 或可以获得 一些示例 XML 文件来应用转换 但我什至不确

随机推荐