如何用SAS生成含university属性的指定格式XML输出文件?
解决SAS导出XML的自定义节点属性与嵌套结构问题
原代码用XML libname引擎默认生成的结构没法满足需求,要实现带university属性的<applicant>节点、并把所有数据嵌套其中,推荐两种可控的实现方法:
方法一:DATA步直接生成XML(灵活易控)
这种方式能完全自定义XML结构,精准匹配你的要求:
/* 指定XML输出路径 */ filename outxml "S:\Applicant.xml"; data _null_; set Applicant end=last; file outxml encoding='UTF-8'; /* 仅在第一条观测时输出XML头部和根节点(根节点可按需删除) */ if _n_=1 then do; put '<?xml version="1.0" encoding="UTF-8"?>'; put '<root>'; end; /* 输出带university属性的<applicant>起始标签 */ put ' <applicant university="我的院校代码">'; /* 遍历数据集所有变量,自动生成对应子节点 */ array vars _all_; do over vars; put ' <' trim(vname(vars)) '>' trim(vvalue(vars)) '</' trim(vname(vars)) '>'; end; /* 输出<applicant>结束标签 */ put ' </applicant>'; /* 仅在最后一条观测时输出根节点结束标签 */ if last then put '</root>'; run;
代码说明:
filename指定输出文件路径;end=last标记最后一条观测,用来控制XML头尾的输出时机;array vars _all_遍历所有变量,自动生成变量名对应的子节点;trim()函数去除多余空白,保证XML格式整洁;- 不需要外层根节点的话,直接删除
<root>相关的PUT语句即可。
方法二:XML映射文件配合LIBNAME引擎
如果需要复用结构,可编写XML映射文件定义节点规则:
- 先创建映射文件
applicant_map.xml:
<?xml version="1.0"?> <SXLEMAP name="ApplicantMap" version="2.1"> <NAMESPACES count="0"/> <OUTPUT> <ROOTNODE name="root"> <NODE name="applicant" use="required"> <ATTRIBUTE name="university" constant="我的院校代码"/> <NODE name="<VARNAME>" use="optional" tag="<VARNAME>" text="<VARVALUE>"/> </NODE> </ROOTNODE> </OUTPUT> </SXLEMAP>
- 在SAS中调用映射文件导出XML:
libname xml_file xml "S:\Applicant.xml" xmlmap="S:\applicant_map.xml"; data xml_file.Applicant; set Applicant; run; libname xml_file clear;
代码说明:
- 映射文件里的
<ATTRIBUTE>标签定义university属性的固定值; <NODE name="<VARNAME>">自动匹配数据集变量,生成对应子节点;xmlmap=参数指定映射文件路径,LIBNAME引擎会按规则生成符合要求的XML。
内容的提问来源于stack exchange,提问作者SASPYTHON
相关产品推荐
相关产品推荐

