我想通过读取 SAS 数据集并使用 SAS 自己的数字格式的 XMLV2 XMLMaps 来编写 XML 文件。
在下面的代码示例中,我尝试了"Z3"格式(将前导零添加到整数中(。但是其他数字格式,如"12.2"(长度 12,小数点后 2 位(也不起作用。
在 SAS XMLV2 XMLMaps 中应用格式通常使用
<FORMAT>
标记中的标记。这适用于日期格式,但对于数字格式似乎并非如此 - 或者我在这里忘记了一些东西。
/*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>
SXLEMAP 列元素定义传入的 xml 如何映射到相应的 SAS 数据集列属性。
DATATYPE 元素告诉引擎在 xml 输出中输出一个整数值 - 该值将未格式化。 该映射通知 xml 使用者应如何处理解析的数据值。
如果重新读取创建的 xml
data in;
set xmltest.test;
run;
您将看到地图的元素值不正确Z3
格式。 该值应刚Z
,格式的修饰符来自 <FORMAT>
width
和 ndec
属性。
我不确定在单个 xml 文件中如何用数据的 SAS 元数据在 xmldata 节点前面