NB. xsl transformation NB. NB. useful for converting XML to flat text NB. for furhter processing with J NB. NB. REQUIREMENT NB. NB. MSXML v4 (Microsoft XML Core Services) NB. http://msdn.microsoft.com/xml NB. NB. USAGE NB. NB. load'~user/xsl.ijs' NB. OUTEXT=: XSLTEXT transform_pxsl_ XMLTEXT NB. NB. <;._2;._2 toJ xsltest transform_pxsl_ xmltest NB. +---------+--------+-+-+----+ NB. |Blablabla|19990920|0|0|-1.1| NB. +---------+--------+-+-+----+ NB. |QWERTY |19990920|0|0|-1.1| NB. +---------+--------+-+-+----+ NB. NB. Author: Oleg Kobchenko 11/24/2003 coclass 'pxsl' NB.*parseError v comprehensive error report NB. OUT=: XSL xsl XML parseError=: 3 : 0 wd 'oleget ',y.,' base parseError; oleid ',y.,' parseError' if. 0~:0".c=. wd 'oleget ',y.,' parseError errorCode;' do. line=. wd 'oleget ',y.,' parseError line;' pos=. wd 'oleget ',y.,' parseError linePos;' src=. wd 'oleget ',y.,' parseError srcText;' t=. 'Error ',c,' at ',line,',',pos t=. t,LF,wd 'oleget ',y.,' parseError reason;' if. #src do. t=. t,LF,src t=. t,LF,(}.(0".pos)#' '),'^' end. 1[smoutput t else. 0 end. ) NB.*transform v transforms xml with xsl NB. OUT=: XSL xsl XML transform=: 4 : 0 try. wd 'pc xslform' try. wd 'cc x oleautomation:MSXML2.DOMDocument.4.0' wd 'cc y oleautomation:MSXML2.DOMDocument.4.0' catch. smoutput 'MSXML v4 is required' throw. end. wd 'oleset x base async 0' wd 'olemethod x base loadXML *',x. if. parseError 'x' do. throw. end. wd 'oleset y base async 0' wd 'olemethod y base loadXML *',y. if. parseError 'y' do. throw. end. try. r=. wd 'olemethod y base transformNode !object:.x.base' catch. smoutput wd'qer' throw. end. catcht. r=. '' end. wd 'pclose' r ) NB. =============================================================== cocurrent 'base' NB. test xsltest=: 0 : 0 | ) xmltest=: 0 : 0 Blablabla 19990920 0 0 -1.1 QWERTY 19990920 0 0 -1.1 ) <;._2;._2 toJ xsltest transform_pxsl_ xmltest