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

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

gradle error "Cannot convert the provided notation to a File or URI" -

python - NameError: name 'subprocess' is not defined -