c# - Unsanitized XML from WebService, How to sanitize -
i have "xml" response webservice isn't sanitized. meaning contains illegal characters, special characters, html tags , hexadecimal.
what's best way sanitize response?
here xml example service.
<root> <response> <type>e</type> <code>cmne_00034</code> <source>cmnq3030</source> <message>some valid message here.</message> <detail>error details here line 114: endif line 115: edit line 116: else > line 117: call lp_accept() line 118: return ($status) line 119: endif line 120: done<end of module> // invalid here @ cmnq3030.exec line 117: call lp_accept() @ gpcsy_run line 5: activate instancename."exec"( ) @ csyv1000.logon line 159: call gpcsy_run() </detail> </response> </root>
i have tried lots of things, creating xmlreader
has settings, this.
public xdocument createxmldocument(string content) { using (var reader = xmlreader.create(new stringreader(content), createxmlreadersettings())) { return xdocument.load(reader); } } private static xmlreadersettings createxmlreadersettings() { return new xmlreadersettings { checkcharacters = false }; }
to changing xmldocument xdocument , using encoding.utf8.getbytes
before actual reading.
it's unlikely xmlreader
, xdocument
etc. infrastructure in .net take kindly being asked read , parse badly formed xml.
i recommend pre-processing xml before loading xml objects.
in case above, looks web service returning error message in <detail>...</detail>
element should wrapped in cdata this:
<root> <response> <type>e</type> <code>cmne_00034</code> <source>cmnq3030</source> <message>some valid message here.</message> <detail><![cdata[ error details here line 114: endif line 115: edit line 116: else > line 117: call lp_accept() line 118: return ($status) line 119: endif line 120: done<end of module> // invalid here @ cmnq3030.exec line 117: call lp_accept() @ gpcsy_run line 5: activate instancename."exec"( ) @ csyv1000.logon line 159: call gpcsy_run() ]]> </detail> </response> </root>
you should able pretty knock parser find, extract , wrap text between end of <detail>
tag , start of </detail>
tag within <[cdata[
, ]]>
tags.
of course, there may other fields in service's xml contain either string data or malformed characters etc. , you'll need find , replace these characters with, example, regular expressions, etc.
once corrected, should have no difficulty loading clean xml xmldocuments/xdocuments etc.
hth.
Comments
Post a Comment