From: mark r on
Trying to create a page like popurls displaying rss feeds from music
sites only im trying with one to start from NME.com and the output
errors with the message "Whitespace is not allowed at this location."

anyone help?

DEMO: http://mngr.co.uk/rss1.asp

Code:
<%@ Language="VBScript" %>
<% Option Explicit %>
<% Response.Charset = "UTF-8" %>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>ASP 101's MegaTokyo RSS Feed Reader</title>
</head>
<body>

<%
If DateDiff("h", Application("MegaTokyoUpdated"), Now()) >= 2 _
Or Request.QueryString("force") <> "" Then

Dim objXML
Dim objItemList
Dim objItem
Dim strHTML
Set objXML = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
objXML.async = False

objXML.setProperty "ServerHTTPRequest", True
objXML.Load("http://nme.com/rss/news.xml")
'objXML.Load(Server.MapPath("megatokyo.xml"))

If objXML.parseError.errorCode <> 0 Then
Response.Write "<pre>" & vbCrLf
Response.Write "<strong>Error:</strong> " &
objXML.parseError.reason
Response.Write "<strong>Line:</strong> " &
objXML.parseError.line & vbCrLf
Response.Write "<strong>Text:</strong> " _
& Server.HTMLEncode(objXML.parseError.srcText) & vbCrLf
Response.Write "</pre>" & vbCrLf
End If

Set objItemList = objXML.getElementsByTagName("item")
Set objXML = Nothing

For Each objItem In objItemList
' MegaTokyo Feed childNodes: 0=title, 1=link, 2=description
strHTML = strHTML & "<p>" & vbCrLf
strHTML = strHTML & "<a href=""" & objItem.childNodes(1).text &
""">"
strHTML = strHTML & "<strong><em>" & objItem.childNodes(0).text
strHTML = strHTML & "</em></strong></a><br />" & vbCrLf
strHTML = strHTML & Replace(objItem.childNodes(2).text, "<br>",
"<br />") & vbCrLf
strHTML = strHTML & "</p>" & vbCrLf
Next

Set objItemList = Nothing

Application.Lock
Application("MegaTokyoContent") = strHTML
Application("MegaTokyoUpdated") = Now()
Application.UnLock
End If
%>

<%= Application("MegaTokyoContent") %>
<!--<%= Application("MegaTokyoUpdated") %>-->

</body>
</html>
From: Anthony Jones on

"mark r" <markrush(a)gmail.com> wrote in message
news:bba31365-df81-4dbc-b5cc-3446912178a9(a)b64g2000hsa.googlegroups.com...
> Trying to create a page like popurls displaying rss feeds from music
> sites only im trying with one to start from NME.com and the output
> errors with the message "Whitespace is not allowed at this location."
>
> anyone help?
>
> DEMO: http://mngr.co.uk/rss1.asp
>
> Code:
> <%@ Language="VBScript" %>
> <% Option Explicit %>
> <% Response.Charset = "UTF-8" %>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
> <head>
> <title>ASP 101's MegaTokyo RSS Feed Reader</title>
> </head>
> <body>
>
> <%
> If DateDiff("h", Application("MegaTokyoUpdated"), Now()) >= 2 _
> Or Request.QueryString("force") <> "" Then
>
> Dim objXML
> Dim objItemList
> Dim objItem
> Dim strHTML
> Set objXML = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
> objXML.async = False
>
> objXML.setProperty "ServerHTTPRequest", True
> objXML.Load("http://nme.com/rss/news.xml")
> 'objXML.Load(Server.MapPath("megatokyo.xml"))
>
> If objXML.parseError.errorCode <> 0 Then
> Response.Write "<pre>" & vbCrLf
> Response.Write "<strong>Error:</strong> " &
> objXML.parseError.reason
> Response.Write "<strong>Line:</strong> " &
> objXML.parseError.line & vbCrLf
> Response.Write "<strong>Text:</strong> " _
> & Server.HTMLEncode(objXML.parseError.srcText) & vbCrLf
> Response.Write "</pre>" & vbCrLf
> End If
>
> Set objItemList = objXML.getElementsByTagName("item")
> Set objXML = Nothing
>
> For Each objItem In objItemList
> ' MegaTokyo Feed childNodes: 0=title, 1=link, 2=description
> strHTML = strHTML & "<p>" & vbCrLf
> strHTML = strHTML & "<a href=""" & objItem.childNodes(1).text &
> """>"
> strHTML = strHTML & "<strong><em>" & objItem.childNodes(0).text
> strHTML = strHTML & "</em></strong></a><br />" & vbCrLf
> strHTML = strHTML & Replace(objItem.childNodes(2).text, "<br>",
> "<br />") & vbCrLf
> strHTML = strHTML & "</p>" & vbCrLf
> Next
>
> Set objItemList = Nothing
>
> Application.Lock
> Application("MegaTokyoContent") = strHTML
> Application("MegaTokyoUpdated") = Now()
> Application.UnLock
> End If
> %>
>
> <%= Application("MegaTokyoContent") %>
> <!--<%= Application("MegaTokyoUpdated") %>-->
>
> </body>
> </html>

At a guess I would say the its the Cr Lf between these that is the cause:-

<% Response.Charset = "UTF-8" %>
<?xml version="1.0" encoding="UTF-8"?>

Try it like this:-

<%
Option Explicit
Response.Charset = "UTF-8"
Response.CodePage = 65001
%><?xml version="1.0" encoding="UTF-8"?>


Having the xml declaration directly follow the closing %> without a line
break eliminates unwanted whitespace at the top of the XML output.

Note without setting the codepage any non-ASCII characters will be trashed
in the output.
I'm not sure why you are using a FreeThreadedDOMDocument in the way you are
a standard DOMDocument would suffice.

I would create the whole lot as XML in a FreeThreadDOMDocument and store
that DOM in the application object.

Given a FreeThreadedDOMDocument in a variable oDOM sending a reponse would
simply be:-

Response.CharSet = "UTF-8"
oDOM.Save Response

Note strictly speaking the content type should be set to
application/xhtml+xml but since some browsers don't recognise that type as a
HTML type that may not be an option here.

--
Anthony Jones - MVP ASP/ASP.NET