2011-03-24 2 views
3

캐리지 리턴 \ linebreak \ linefeed를 SAS 코드에 추가하여 출력 xml에 결과가 나타나도록하려고합니다.SAS 코드에 캐리지 리턴을 추가하는 방법은 무엇입니까?

data test_JK_merge; 
    length body $ 1500; 
    set test_JK; 
    body=strip(termEntry_st)||"
"||strip(TS_Status)||strip(langset_en_st)||strip(nttG)||strip(langset_en_ed)||strip(termEntry_ed); 
    /*merged=strip(termEntry_st)||"'0A'X"||strip(TS_Status)||"<br />"||strip(langset_en_st)||"<br />"||strip(nttG)||"<br />"||strip(langset_en_ed)||"<br />"||strip(termEntry_ed);*/ 
    keep body; 
run; 

libname outxml xml "U:\Projects\...\test2.mtf.xml"; 

data outxml.text; 
    set test_JK_merge; 
run; 

나는, 그런 & # 13 ;, 'OA'X 등의 다른 방법을 시도 # 10 ;, < &는 /> 등 은 그러나 그들 중 누구도 일하지 BR. 아무도 도울 수 있습니까?

실제 결과 :

<TEXT> 
    <body><termEntry id=1>&#13;<note type="TS_Status">ELC TERM present in OCS_Help_xml OCS_properties</note><langSet lang="eng-us">ntig><termGrp><term>ARM</term></termGrp></ntig></langSet></termEntry></body> 
</TEXT> 

예상 결과 :

<TEXT> 
     <body><termEntry id=1> 
<note type="TS_Status">ELC TERM present in OCS_Help_xml OCS_properties</note><langSet lang="eng-us">ntig><termGrp><term>ARM</term></termGrp></ntig></langSet></termEntry></body> 
    </TEXT> 

답변

3

실제로 당신이 LIBNAME의 XML을 사용하여

<body><termEntry ... 

을 얻을 약간 놀랐어요. 데이터 단계에서 XML을 수동으로 생성 할 수도 있습니다.

데이터 세트의 각 변수에 대해 그 아래 태그로 입력 파일의 각 레코드 형식의 출력

<dsname> 
    <columnname>column value</columnname> 
</dsname> 
<dsname> 
    <columnname>column value</columnname> 
</dsname> 
..etc... 

즉 하나의 태그 <dsname>를 생성합니다 스타일 = 일반 (기본)와

LIBNAME의 XML . 그런 다음 SAS는 결과를 다시 읽을 수 있도록 모든 값을 이스케이프합니다. 따라서 데이터 세트의 변수가 문자열이고 어떤 문자가 <, & 등인 경우 XML을 "혼동하지 않습니다". 나는이 옵션은 것 같다 뭔가

<TEXT> 
    <body> &lt;termEntry id=1&gt;&lt;/termEntry&gt; </body> 
</TEXT 

처럼되고 LIBNAME의 XML의 출력을 기대할 데이터 세트의 변수가

<termEntry id=1>...</termEntry> 

같은 값 뭔가가 귀하의 경우에 그래서

data test_JK; 
    termEntry_st = "<termEntry id=1>"; 
    termEntry_ed = "</termEntry>"; 
    TS_Status = "<note type='TS_Status'>ELC TERM present in OCS_Help_xml OCS_properties</note>"; 
    langset_en_st = "<langSet lang='eng-us'>"; 
    langset_en_ed = "</langSet>"; 
    nttG = "<ntig><termGrp><term>ARM</term></termGrp></ntig>"; 

data _null_; 
    set test_JK end=e; 
    file "tmp.xml"; 

    if _n_ eq 1 then do; 
     put "<something>"; 
    end; 

    put " <text>"; 
    put " <body>" +(-1) termEntry_st; 
    put TS_Status +(-1) langset_en_st +(-1) nttG +(-1) langset_en_ed +(-1) termEntry_ed + (-1) "</body>"; 
    put " </text>"; 

    if e then do; 
     put "</something>"; 
    end; 
run; 
+0

: 중 원하는 XML (당신이 SAS의 버전에 따라 가능하지 않을 수 있습니다)를 생성하기 위해, 또는 수동으로 DATA 단계를 사용하여 XML을 생성하기 위해 LIBNAME의 XML로 XMLMap 사용하는 방법을 이해하는 안녕 탐, 너 무슨 뜻인지 알았어. ** put ** 문으로 시도하고 있지만 다음과 같은 문제가 발생했습니다 : – mj023119

+0

@Tom : 한 변수의 문자 길이가 ** 256 **에 도달하면 자동으로 하드 리턴이 추가되어 xml 구조가 파괴됩니다. 그리고 잘 formness, 따라서 IE에서 XML을로드 할 때 오류. 이 문제를 방지하는 방법을 알고 있습니까? – mj023119

+0

@Tom : 아래 예는 ' ........ ** < 형식 ** = "TS_User2"> 52' 코드를 Word로 복사하면 ** note **와 ** type ** 사이의 하드 리턴을 볼 수 있습니다 ** – mj023119

관련 문제