(phixonline)--> with javascript_semantics constant {hchars,hsubs} = columnize({{"<","&lt;"}, {">","&gt;"}, {"&","&amp;"}, {"\"","&quot;"}, {"\'","&apos;"}}) function xmlquote_all(sequence s) for i=1 to length(s) do s[i] = substitute_all(s[i],hchars,hsubs) end for return s end function function xml_CharacterRemarks(sequence data) string res = "<CharacterRemarks>\n" for i=1 to length(data) do res &= sprintf(" <CharacterName=\"%s\">%s</Character>\n",xmlquote_all(data[i])) end for return res & "</CharacterRemarks>\n" end function constant testset = { {"April", "Bubbly: I'm > Tam and <= Emily"}, {"Tam O'Shanter", "Burns: \"When chapman billies leave the street ...\""}, {"Emily", "Short & shrift"} } printf(1,xml_CharacterRemarks(testset)) -- Sample output: -- <CharacterRemarks> -- <CharacterName="April">Bubbly: I&apos;m &gt; Tam and &lt;= Emily</Character> -- <CharacterName="Tam O&apos;Shanter">Burns: &quot;When chapman billies leave the street ...&quot;</Character> -- <CharacterName="Emily">Short &amp; shrift</Character> -- </CharacterRemarks>