SAS XMLMap /使用格式写入XML文件

时间:2019-04-16 13:10:06

标签: sas

我想通过读取SAS数据集并使用SAS自己的数字格式的XMLV2 XMLMap来编写XML文件。

在下面的代码示例中,我尝试了“ Z3”格式(将前导零添加到您的整数)。但是其他数字格式(例如“ 12.2”(长度为12的小数点后两位)也无效。

在SAS XMLV2 XMLMap中应用格式通常是通过

完成的
<FORMAT>
COLUMN定义中的

标记。对于日期格式,这很好用,但对于数字格式,它似乎不起作用-或我在这里忘记了一些东西。

/*Minimal SAS Code Example:*/

filename xmlmap temp;
filename xmlout temp;

/*Define SAS XMLV2 XMLMap:*/
data _null_;
   file xmlmap encoding='UTF-8';
   infile datalines4;
   input;
   put _infile_;
datalines4;
<?xml version="1.0" encoding="UTF-8"?>
<SXLEMAP name="TEST" version="2.1">

   <OUTPUT>
      <TABLEREF name="TEST" />
   </OUTPUT>

   <NAMESPACES count="0"/>

   <TABLE name="TEST">
      <TABLE-PATH syntax="XPath">/Root</TABLE-PATH>

      <COLUMN name="ORIGINAL">
         <PATH syntax="XPath">/Root/ORIGINAL</PATH>
         <TYPE>numeric</TYPE>
         <DATATYPE>integer</DATATYPE>
      </COLUMN>

      <COLUMN name="FORMATED">
         <PATH syntax="XPath">/Root/FORMATED</PATH>
         <TYPE>numeric</TYPE>
         <DATATYPE>integer</DATATYPE>
         <FORMAT width="3" ndec="0">Z3</FORMAT>
      </COLUMN>

   </TABLE>

</SXLEMAP>
;;;;

/*Define Input Data Set:*/
data WORK.TEST;
   infile datalines;
   input
      ORIGINAL :8.
      FORMATED :8.
      ;
   format FORMATED Z3.0;
datalines;
4 4
10 10
;
run;

/*Link XMLMap with the Input Data Set and Output XML-File*/
libname XMLTEST
   xmlv2
   xmlfileref=xmlout
   xmltype=xmlmap
   xmlmap=xmlmap
   xmlencoding='UTF-8'
   ;

/*Write Data Set to XML-File:*/
data XMLTEST.TEST;
   set WORK.TEST;
run;

/*Print XML-File to Log:*/
data _null_;
   infile xmlout;
   input;
   put _infile_;
run;

filename xmlmap clear;
filename xmlout clear;

预期结果(XML文件)-此处的“格式化节点”中带有前导零:

 <Root>
 <ORIGINAL>4</ORIGINAL>
 <FORMATED>004</FORMATED>
 </Root>
 <Root>
 <ORIGINAL>10</ORIGINAL>
 <FORMATED>010</FORMATED>
 </Root>

实际结果(XML文件)-格式节点中没有前导零:

 <Root>
 <ORIGINAL>4</ORIGINAL>
 <FORMATED>4</FORMATED>
 </Root>
 <Root>
 <ORIGINAL>10</ORIGINAL>
 <FORMATED>10</FORMATED>
 </Root>

1 个答案:

答案 0 :(得分:0)

SXLEMAP Column元素定义如何将传入的xml映射到适当的SAS数据集列属性。

DATATYPE元素告诉引擎在xml输出中输出一个整数值-它将是未格式化的。该映射会通知xml使用者如何处理解析后的数据值。

如果您重新阅读所创建的xml

data in;
  set xmltest.test;
run;

您将看到地图的格式元素值Z3不正确。该值应仅为Z,格式的修饰符来自<FORMAT> widthndec属性。

我不确定在单个xml文件中用数据的SAS元数据在xmldata节点前添加前缀的方式。