SAS9 XML操作

来源:互联网 发布:手机视频剪辑软件排名 编辑:程序博客网 时间:2024/05/01 22:44

SAS9 XML操作

在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文件内容如下:
<?xml version="1.0" encoding="windows-1252" ?>
<TABLE>
   <SINGERS>
      <FirstName> Tom </FirstName>
      <Age> 62 </Age>
   </SINGERS>
   <SINGERS>
      <FirstName> Willie </FirstName>
      <Age> 70 </Age>
   </SINGERS>
   <SINGERS>
      <FirstName> Randy </FirstName>
      <Age> 43 </Age>
   </SINGERS>
</TABLE>

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中就不会含有空格,如下
   <?xml version="1.0" encoding="windows-1252" ?>
 - <TABLE>
  - <CLASS>
     <Name>Alfred</Name>
     <Sex>M</Sex>
     <Age>14</Age>
     <Height>69</Height>
     <Weight>112.5</Weight>
    </CLASS>
 
 7、可以自定义自己的输出/输入格式么?
 答:可以,通过使用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;  
 
 
上面只是SAS XML引擎介绍的一部分,具体请参考下面网址: 

 http://support.sas.com/rnd/base/topics/sxle913/usersguide913.htm

原创粉丝点击