统计211

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3891|回复: 0
打印 上一主题 下一主题

SAS 9中的XML操作讲解

[复制链接]
跳转到指定楼层
1
发表于 2011-7-1 13:28:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  在SAS9.1.3版本中,开始支持XML操作,通过其强大的XML引擎技术,已经把XML完美的体现在SAS里面
  具体体现如下:
  从SAS数据集导出一个XML文档,这个XML文档可以被其它产品使用,也可以被用于不同主机间的数据传输
  导入XML文档,这个XML文档可以转换为SAS数据集
  在XML引擎使用上也非常简单,同其它引擎使用一样,首先要通过LIBNAME分配一个采用XML引擎的库,如下面例子,简单的把一个SAS数据集导出为一个XML文件
  libname myfiles 'C:\My Files\';
  libname myxml xml 'C:\My Files\XML\Singers.xml';
  data myxml.Singers;
  set myfiles.Singers;
  run;
  输出的XML文件内容如下:
  引擎常见问题:
  1、SAS XML引擎是采用DOM还是采用SAX方式处理?
  答:XML会根据不同的情况使用不同的方式,如下:
  如果格式化输出类型为GENERIC(缺省)或者ORACLE,那么XML引擎将采用DOM模型
  如果你使用XMLMAP以导入一个XML文件,那么XML引擎将采用SAX模型
  2、XML引擎会验证XML文档么?
  答:不会,XML引擎会假设XML文档内容是全部正确的,引擎不使用DTD或者 SCHEMA
  3、XML引擎和ODS MARKUP输出有什么不同?
  答:ODS MARKUP可以输出XML文档,但不能读XML文档
  4、为什么我导入XML文档时发生错误
  答:XML引擎读文件依赖于其相应的选项XMLTYPE=。如果XML文件不符合SAS格式,将会报错,你可以通过XMLMAP来规范化你的XML文件
  一个例外是HTML文件格式,XML引擎只支持导出,而不支持导入
  5、我可以使用SAS数据选项作用于XML引擎上么?
  答:可以,但需要小心使用
  6、为什么导出的XML文件中含有空格
  答:因为XML引擎是和W3C标准保持一致,所有会在元素的前、后加入空格,如果你想去除空格也可以,只需使用指定的 Tagset ,如下:
  libname testxml xml 'C:\My Documents\XML\nospace.xml' tagset=tagsets.sasxmnsp;
  proc copy in=sashelp out=testxml;
  select class;
  run;
  这样产生的XML中就不会含有空格,如下
  可以自定义自己的输出/输入格式么?
  答:可以,通过使用Tagset,如XML引擎在默认输出时元素名采用字段名,如果你想自定义输出为标签名,可以如下使用:
  /*产生数据集*/
  data Singers;
  input Name $ Style $;
  label Name=“SingerFirstName”
  Style=“MusicStyle”;
  datalines;
  Tom Rock
  Kris Country
  Willie Country
  Barbra Contemporary
  Paul Rock
  Randy Country
  ;
  run;
  /*定义TAGSET*/
  proc template;
  define tagset Tagsets.Uselabs;
  parent = tagsets.sasxmog;
  notes “Uses label instead of name for tags”;
  define event SASColumn;
  start:
  ndent;
  put
  '<' ;
  put
  TEXT
  / if cmp(XMLDATAFORM, “ATTRIBUTE”);
  put
  ' name=“'
  / if cmp(XMLDATAFORM, ”ATTRIBUTE”);
  put
  LABEL;
  put
  '”'
  / if cmp(XMLDATAFORM, “ATTRIBUTE”);
  break;
  finish:
  xdent
  / if exists(MISSING);
  break
  / if exists(MISSING);
  put
  ' />'
  / if cmp(XMLDATAFORM, “ATTRIBUTE”);
  put
  CR
  / if cmp(XMLDATAFORM, “ATTRIBUTE”);
  xdent
  / if cmp(XMLDATAFORM, “ATTRIBUTE”);
  break
  / if cmp(XMLDATAFORM, “ATTRIBUTE”);
  put
  '</' ;
  put
  LABEL;
  put
  '>' ;
  put
  CR;
  xdent;
  break;
  end;
  end; /* uselabs */
  run;
  /*输出XML文件*/
  libname testxml xml 'C:\My Documents\XML\labels.xml' tagset=tagsets.uselabs;
  proc copy in=work out=testxml;
  select Singers;
  run;

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


免责声明|关于我们|小黑屋|联系我们|赞助我们|统计211 ( 闽ICP备09019626号  

GMT+8, 2025-4-19 21:00 , Processed in 0.097329 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表