|
|
||||||
|
#1
|
|
|
|
|
Hello,
I have some XML that is returned to my application from another vendor that I cannot change before it gets to me. I can only alter it after it gets to my application. That being said, I am having a problem loading the XML correctly into my app. Here is the code: ==================================== Dim sPaymentXML as String sPaymentXML = Request.Form("PaymentXML").ToString 'Create the XML Document Dim xmlDoc As XmlDocument xmlDoc = New XmlDocument() 'Load the Xml file xmlDoc.LoadXml(sPaymentXML) ==================================== Whenever I run this code, it fails on the last line and gives an error of something like: The data at the root level is invalid. Line 1, position 1. I believe this is because something is off in the XML. So, I am attempting to replace the quotes that are in the XML doc with anything, but when the code runs, it just ignores the Replace command, and after several different attempts, I cannot get the code to recognize the double quotes that need to be replaced. Here is the code I add for replacing the quotes in the XML: 'Replace the quotes sPaymentXML = sPaymentXML.Replace("""", "blah") I have also tried outputting the XML directly to a Label on the screen so I can examine it and it is completely valid. I have even copied the xml that appeared in the Label, and pasted it into VisualStudio, and run the LoadXML code again using the newly pasted code, and that works. Any ideas?? |
|
|
|
#2
|
|
|
|
|
Hello george,
I saw this blog post just now and thought of you... [url down] |
|
#3
|
|
|
|
|
Thanks for the response, Rory.
I still didn't have any luck after reading that post, though. I went back and tried a few million different approaches and finally found a way that would work. The problem does seem to be extra characters that are coming over, but I couldn't be certain if it was the BOM or if it was something else. First, I had outputted what I was getting from Request.Form("PaymentXML") to a label on my page, and it looked like perfectly fine XML. Next, I decided to output it to a file as other sites have suggested. So, I created a temp file, wrote the contents of Request.Form("PaymentXML") to that, and examined it. What it was doing was writing all of the special characters that make up the xml tags in HTML character code format. For example, the "<" character was being written as "<", the ">" character was being written as ">", and the double quotes were being written as """. So, I did Replace on those, and then ran that data back into my application, and it worked. Here is the code I'm talking about: =================================== 'Get xml from vendor sPaymentXML = Request.Form("PaymentXML") 'Convert special character codes sPaymentXML = sPaymentXML.Replace("<", "<") sPaymentXML = sPaymentXML.Replace(">", ">") sPaymentXML = sPaymentXML.Replace(""", """") 'Create temp file Dim sTempFileName As String = System.IO.Path.GetTempFileName() Dim fstreamTemp As New System.IO.FileStream(sTempFileName, IO.FileMode.Create, IO.FileAccess.ReadWrite) Dim fwriterTemp As New IO.StreamWriter(fstreamTemp) 'Write the XMl to the temp file With fwriterTemp Try .BaseStream.Seek(0, IO.SeekOrigin.End) .WriteLine(sPaymentXML) Finally .Close() End Try End With fstreamTemp.Close() Dim xmlDoc As XmlDocument = New XmlDocument xmlDoc.Load(sTempFileName) =================================== When xmlDoc.Load runs now, there is no error message and I can traverse the XMLDocument just fine. After I'm done with the XMLDocument, I delete the temp file. I'm still not sure why I have to create a temp file, write the replaced contents of sPaymentXML into it, then load that into an new XMLDocument just to have it work. You would think I could just take the replaced contents of sPaymentXML and use xmlDoc.LoadXML(sPaymentXML) to achieve the same result, but that doesn't work. Just thought I'd post my finding in case it helped someone else. "Rory Becker" wrote: [..] |
|
#4
|
|
|
|
|
Ooops, it looks like the formatting of this post did not allow me to show the
HTML character codes. When I said: For example, the "<" character was being written as "<", the ">" character was being written as ">", and the double quotes were being written as """. It really should say that: < = & lt ; (without the spaces) > = & gt ; (without the spaces) " = & quot ; (without the spaces) "George" wrote: [..] |
|
#5
|
|
|
|
|
Hello george,
>> 'Get xml from vendor >> sPaymentXML = Request.Form("PaymentXML") Try... ------------------------------------------------------------- sPaymentXML = System.Web.HttpServerUtility.HtmlDecode(Request.Fo rm("PaymentXML")) ------------------------------------------------------------- I think the vendor or some intermediate process might have HtmlEncoded your XML. |
|
#6
|
|
|
|
|
Hi Rory,
Thanks for the reply. This still generates the same error message: "Data at the root level is invalid. Line 1, position 1." Here is how I added it to the code: ------------------------------------------------- 'Get xml from vendor sPaymentXML = Request.Form("PaymentXML") sPaymentXML = HttpContext.Current.Server.HtmlDecode(Request.Form ("PaymentXML")) Dim xmldoc As XmlDocument = New XmlDocument xmldoc.LoadXml(sPaymentXML) ------------------------------------------------- I did have to change from "System.Web.HttpServerUtility.HtmlDecode" to "HttpContext.Current.Server.HtmlDecode" because when I used the first one I was getting a message that "Reference to a non-shared member requires an object reference." But once I changed that, there was no problem with that line of code, I'm just not sure that it still created the XML as LoadXML() is looking for. "Rory Becker" wrote: [..] |
|
#7
|
|
|
|
|
I should say though, that the new code you mentioned:
sPaymentXML = System.Web.HttpServerUtility.HtmlDecode(Request.Fo rm("PaymentXML")) does work when I am creating the temp file and loading it using xmlDoc.Load(). It just doesn't help with the xmldoc.LoadXML() function. "George" wrote: [..] |
|
|
| Similar Threads | |
| Replace two double-quotes with one double-quote I have a table that may have values such as "". This same table may even have three double quotes i.e. """. I need to run a query that replaces the two double-quotes with a... |
|
| DBI quote() seems to replace double quotes with two single quotes I'm running a script where I'm inserting some values into a MySQL database. I'm using quote to escape values before inserting them into the database and the problem it's... |
|
| problem: replace double quotes I have a string that contains double quotes. I need to replace these, but how can i do it as the code would be: replace(string,""","") Is there a way of breaking out of... |
|
| Replace double quotes (") with single quotes (') Hi, I need to replace all the double quotes (") in a textbox with single quotes ('). I used this code text= Replace(text, """", "'" This works fine (for normal double... |
|
|
All times are GMT. The time now is 02:30 AM. | Privacy Policy
|