XML Parsing Error: Junk After Document Element

P

pbd22

hi.

i keep getting this error.

as i understand it, my xml isn't formatted correctly.
the online errata suggests the standard formatting
to solve this problem:

element
(tab) (tab) element
(tab) (tab) (tab) element /element
(tab) (tab) (tab) element /element
(tab) (tab) /element
/element

i attempted to acheive this by using the below line (the xml is coming
from the server):

stringbuilder.Append(Microsoft.VisualBasic.vbTab)

but, I still get the error.

I have also tried an xml style sheet with style="padding-left:n"
and this doesnt work.

i keep getting that darn error.

when i alert the XML returned from the server, i get all
elements on the left-most position. no formatting. despite the
two solutions above.

i am guessing this comes up a lot. what am i doing wrong?

thanks!
 
J

Joseph Kesselman

A well-formed XML document must have one, and only one, top-level
element. Anything after that element's end-tag will be ignored at best,
and possibly reported as an error such as the one you're getting here.

Fix your file/stream/whatever.
 
P

pbd22

Hi.

Thanks.

I was hopeful after your comment, and deleted my top-level tag,
"users", leaving
just "user" as the top tag. I am still getting that error, tho. My
string builder on
the server is as follows (i have tried this with the style sheet
commented out also) ... maybe you can see something that i am missing?

Dim sbHtml As New System.Text.StringBuilder

sbHtml.Append("<?xml version='1.0' standalone='yes'?>")
sbHtml.Append(Environment.NewLine)
sbHtml.Append("<?xml-stylesheet type='text/css'
href='../styles/xml.css'?>")
sbHtml.Append(Environment.NewLine)

For i As Integer = 0 To counter - 1
sbHtml.Append(vbTab)
sbHtml.Append("<user id='")
sbHtml.Append(i)
sbHtml.Append("' siteId='")
sbHtml.Append(siteid(i))
sbHtml.Append("'>")
sbHtml.Append(Environment.NewLine)
sbHtml.Append(vbTab)
sbHtml.Append(vbTab)
sbHtml.Append("<photolocation>")
sbHtml.Append("../uploads/")
sbHtml.Append(uname(i))
sbHtml.Append("/thumbnails/")
sbHtml.Append(pname(i))
sbHtml.Append("</photolocation>")
sbHtml.Append(Environment.NewLine)
sbHtml.Append(vbTab)
sbHtml.Append(vbTab)
sbHtml.Append("<headline>")
sbHtml.Append(headline(i))
sbHtml.Append("</headline>")
sbHtml.Append(Environment.NewLine)
sbHtml.Append(vbTab)
sbHtml.Append(vbTab)
sbHtml.Append("<age>")
sbHtml.Append(CurrentAge(year(i), month(i), day(i)))
sbHtml.Append("</age>")
sbHtml.Append(Environment.NewLine)
sbHtml.Append(vbTab)
sbHtml.Append(vbTab)
sbHtml.Append("<lastactive>")
If LastActive(dlogin(i)) <= 1 Then
sbHtml.Append("24 hours")
End If
If LastActive(dlogin(i)) > 1 and LastActive(dlogin(i)) <= 7
Then
sbHtml.Append(LastActive(dlogin(i)))
sbHtml.Append(" days")
End If
If LastActive(dlogin(i)) >= 7 and LastActive(dlogin(i)) <=
14 Then
sbHtml.Append("week")
End If
If LastActive(dlogin(i)) > 14 and LastActive(dlogin(i)) <=
31 Then
sbHtml.Append("month")
End If
sbHtml.Append("</lastactive>")
sbHtml.Append(Environment.NewLine)
sbHtml.Append(vbTab)
sbHtml.Append(vbTab)
sbHtml.Append("<aboutme>")
sbHtml.Append(aboutme(i))
sbHtml.Append(" ...")
sbHtml.Append("</aboutme>")
sbHtml.Append(Environment.NewLine)
sbHtml.Append(vbTab)
sbHtml.Append("</user>")
sbHtml.Append(Environment.NewLine)
Next

Context.Response.ContentType="text/xml"
Context.Response.Write(sbHtml.ToString)
 
P

pbd22

hi, thanks.

i have done some reading about MSXML and have even downloaded the
parser.
i am still unclear on one item. the XML document i am working with does
not (nor
do i want it to) exist as a file. this is an ajax call and the
stringbuilder i constructed was creating the document out of data
pulled from the database. the ajax call then grabs the XML text from
the server and writes it to a hidden DIV at the bottom of the form.

i am not sure how you see MSXML as a solution to my problem. does it
pre-format the
document prior to delivery to the client? I'd appreciate you thinking
behind this recommendation.

thanks again.
 
P

Peter Flynn

pbd22 said:
hi.

i keep getting this error.

as i understand it, my xml isn't formatted correctly.

It's nothing to do with formatting. It's the structure of your document.

Append adds data below the end of a file: this is an error in XML, where
data must be *inserted* (using the correct element type). At the end
of the file, once the end-tag has occurred, no further elements are
permitted.

///Peter
 
P

pbd22

Hi Peter,

thanks. I have tried my string builder using the Insert statement
but am still getting the same error. What about my current code
is incorrect? it doesn't sound like it matters if i am using
stringbuilder
or xmltextwriter, and i have changed all the appends to inserts. what
am i missing?

thank you.

Dim sbhtml As New System.Text.StringBuilder

sbhtml.Insert(sbhtml.Length, "<?xml version='1.0'
standalone='yes'?>")
//NOTE: I have also tried surrounded the below with <usrers>
</users>

For i As Integer = 0 To counter - 1
sbhtml.Insert(sbhtml.Length, "<user id='")
sbhtml.Insert(sbhtml.Length, i)
sbhtml.Insert(sbhtml.Length, "' siteid='")
sbhtml.Insert(sbhtml.Length, siteid(i))
sbhtml.Insert(sbhtml.Length, "'>")
sbhtml.Insert(sbhtml.Length, "<photolocation>")
sbhtml.Insert(sbhtml.Length, "../uploads/")
sbhtml.Insert(sbhtml.Length, uname(i))
sbhtml.Insert(sbhtml.Length, "/thumbnails/")
sbhtml.Insert(sbhtml.Length, pname(i))
sbhtml.Insert(sbhtml.Length, "</photolocation>")
sbhtml.Insert(sbhtml.Length, "<headline>")
sbhtml.Insert(sbhtml.Length, headline(i))
sbhtml.Insert(sbhtml.Length, "</headline>")
sbhtml.Insert(sbhtml.Length, "<age>")
sbhtml.Insert(sbhtml.Length, CurrentAge(year(i), month(i),
day(i)))
sbhtml.Insert(sbhtml.Length, "</age>")
sbhtml.Insert(sbhtml.Length, "<lastactive>")
If LastActive(dlogin(i)) <= 1 Then
sbhtml.Insert(sbhtml.Length, "24 hours")
End If
If LastActive(dlogin(i)) > 1 And LastActive(dlogin(i)) <= 7
Then
sbhtml.Insert(sbhtml.Length, LastActive(dlogin(i)))
sbhtml.Insert(sbhtml.Length, " days")
End If
If LastActive(dlogin(i)) >= 7 And LastActive(dlogin(i)) <=
14 Then
sbhtml.Insert(sbhtml.Length, "week")
End If
If LastActive(dlogin(i)) > 14 And LastActive(dlogin(i)) <=
31 Then
sbhtml.Insert(sbhtml.Length, "month")
End If
sbhtml.Insert(sbhtml.Length, "</lastactive>")
sbhtml.Insert(sbhtml.Length, "<aboutme>")
sbhtml.Insert(sbhtml.Length, aboutme(i))
sbhtml.Insert(sbhtml.Length, " ...")
sbhtml.Insert(sbhtml.Length, "</aboutme>")
sbhtml.Insert(sbhtml.Length, "</user>")
Next

Context.Response.ContentType = "text/xml"

//NOTE: I have tried both of the following:
Context.Response.Write(sbhtml.Insert(sbhtml.Length,
sbhtml.ToString))
Context.Response.Write(sbhtml.ToString))

Peter said:
pbd22 said:
hi.

i keep getting this error.

as i understand it, my xml isn't formatted correctly.

It's nothing to do with formatting. It's the structure of your document.

Append adds data below the end of a file: this is an error in XML, where
data must be *inserted* (using the correct element type). At the end
of the file, once the end-tag has occurred, no further elements are
permitted.

///Peter
--
XML FAQ: http://xml.silmaril.ie/

the online errata suggests the standard formatting
to solve this problem:

element
(tab) (tab) element
(tab) (tab) (tab) element /element
(tab) (tab) (tab) element /element
(tab) (tab) /element
/element

i attempted to acheive this by using the below line (the xml is coming
from the server):

stringbuilder.Append(Microsoft.VisualBasic.vbTab)

but, I still get the error.

I have also tried an xml style sheet with style="padding-left:n"
and this doesnt work.

i keep getting that darn error.

when i alert the XML returned from the server, i get all
elements on the left-most position. no formatting. despite the
two solutions above.

i am guessing this comes up a lot. what am i doing wrong?

thanks!
 
P

pbd22

i believe that i am getting this error
because i am sending the results to a DIV
inside my HTML? this is not a stand-alone
xml file.

alas, i am still unsure as the error persists.
 
P

Peter Flynn

pbd22 said:
Hi Peter,

thanks. I have tried my string builder using the Insert statement
but am still getting the same error. What about my current code
is incorrect? it doesn't sound like it matters if i am using
stringbuilder
or xmltextwriter, and i have changed all the appends to inserts. what
am i missing?

I'll leave the answer to a VB expert.
You may have better luck posting this in a Microsoft newsgroup
if you're stuck using VB.

///Peter
 
P

pbd22

hi.

so, the changes i made to my code,
adding inserts and taking out the appends,
was that the solution that you were suggesting?
i was a little bit unclear, should the changes
i made have worked based on your advice?

thanks.
 
P

Peter Flynn

pbd22 said:
hi.

so, the changes i made to my code,
adding inserts and taking out the appends,
was that the solution that you were suggesting?
i was a little bit unclear, should the changes
i made have worked based on your advice?

All I said was that you can't add stuff past the end of an XML document.
It wasn't clear from your original post that you were using append to
*create* the whole document: I thought you were just trying to add stuff
to an existing document. Sorry for the misunderstanding.

///Peter
 
P

pbd22

oh. ok. i see. no, i am programatically creating the XML
from database values, then writing the results via AJAX
to a DIV on my form. It lives there while the user's session
lasts. the XML is never in a "file" per se.

so, i guess i am back to the drawing board.

thanks for trying.
 
P

pbd22

hi. a bit of an update:

i am getting a sense that my error is sum'd up as follows:

i am sending my xml via stringbuilder from the server like this:

<header>
<body>
<a>
<b>blah</b>
<c>blah</c>
</a>
</body>
</header>

but, it is turning up on the client like this:

&lt;header&gt;
&lt;body&gt;
&lt;a&gt;&lt;b&gt;blah&lt;/b&gt;&lt;c&gt;blah&lt;/c&gt;&lt;/a&gt;
&lt;/body&gt;
&lt;/header&gt;

the "<" and the ">" are getting changed into &lt; and &gt;

how do i fix this?
 
A

Andy Dingley

pbd22 said:
the "<" and the ">" are getting changed into &lt; and &gt;

how do i fix this?

Two possible ways:

* Use DOM, not a string tool.

* Learn at least as much about how to work with XML as native strings
as someone who writes DOMs.

(Guess what, the first of these is easier and more reliable)
 
P

pbd22

hi.

i am new to this and i am trying. As for DOM, I have tried the below:

I am using stringbuilder to build the database values into an
XML doc.
then, to create the DOM, I do the following:
Dim xml As XmlDocument = New XmlDocument
xml.LoadXml(sbhtml.ToString)

Context.Response.ContentType = "text/xml"
Context.Response.Write(xml)

This returns nothing on the client. I keep getting "undefined". I
appreciate your DOM suggestion, and am learning as i go, but maybe you
could help to provide a solution?

thanks again.
 
P

pbd22

ok, i figured this out.

for others, maybe this will help:

i am working in .NET

I created a search_data.aspx file for the AJAX call.
in the search_data.aspx file, i had the:

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">

tags wrapping my script. hence, autogenerated HTML
was added after my XML stuff, causing the Junk after XML error.

take out the content tags and you should be good to go.

thanks all for your suggestions along the way.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,999
Messages
2,570,243
Members
46,836
Latest member
login dogas

Latest Threads

Top