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:
Hello george,
I saw this blog post just now and thought of you...
http://blog.madskristensen.dk/post/D...s-invalid.aspx
--
Rory
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.