webForumDet fria alternativet

Optimera MSXML2.DOMDocument (expressen)?

ASP

8 svar · 362 visningar · startad av Bosse168

Medlem sedan nov. 20031 018 inlägg
Frågan#1

Någon som har något förslag på hur man kan optimera denna kod eftersom när jag kör den på en sida med massa annan ASP kod så står det att tiden för script överskrids.


<%				
Set XMLDoc = CreateObject("MSXML2.DOMDocument")
XMLDoc.setProperty "ServerHTTPRequest", true
XMLDoc.async=false
XMLDoc.Load "http://expressen.se/expressen/jsp/xml.jsp?page=10"
If XMLDoc.parseError.errorCode = 0 Then

Set nodeLst = XMLDoc.getElementsByTagName("headline")
Set nodeLst2 = XMLDoc.getElementsByTagName("ingress")
Set nodeLst3 = XMLDoc.getElementsByTagName("newline")

Dim myVarnoje

Set root = xmlDoc.documentElement

For i = 0 To 5

Set i = Request.QueryString("artikelId")

myVarnoje = root.ChildNodes(i).Attributes.Item(0).Value 

sIngress = nodeLst2.Item(i).xml
   sIngress = Replace(sIngress, "<ingress>", "")
    sIngress = Replace(sIngress, "</ingress>", "")
    sIngress = Replace(sIngress, "<newline/>", "<br>")

response.write "<a href=http://skene.nu/nyheter_klick.asp?id=4&url=http://www.expressen.se/index.jsp?a=" & myVarnoje & " target=""_blank"">" & nodeLst.Item(i).text & "</a><br>"

Next

End If
%>
Medlem sedan juni 200032 967 inlägg
#2

Vad i den här koden är det som tar tid då?

Jag förstår inte riktigt detta:

For i = 0 To 5

Set i = Request.QueryString("artikelId")

Du sätter igång loopen, och sedan skriver du direkt över värdet i? Dessutom använder du set, det ska du bara göra när du skapar objekt. Utan att helt förstå vad du försöker göra så skulle jag säga att du ska ta bort raden som börjar med set i.

mvh

Medlem sedan dec. 1999707 inlägg
#3

Kanske det här fungerar bättre? Är lite osäker på <newline/>-replace:n fungerar som jag gjort här nedan.

Vad man annars kan göra om man orkar, som är väldigt snyggt, är att göra en xslt-mall och transformera det med xml:en.

Set XMLDoc = CreateObject("MSXML2.DOMDocument")
XMLDoc.setProperty "ServerHTTPRequest", true
XMLDoc.async=false
XMLDoc.Load "http://expressen.se/expressen/jsp/xml.jsp?page=10"
If XMLDoc.parseError.errorCode = 0 Then

	Set articleNode =	XMLDoc.selectSingleNode("page/article[@id='" & Request.QueryString("artikelId")& "']")
	If Not articleNode Is Nothing then

		sIngress =	Replace(articleNode.selectSingleNode("ingress").text, "<newline/>", "<br>")
		response.write "<a href=http://skene.nu/nyheter_klick.asp?id=4&url=http://www.expressen.se/index.jsp?a=" & articleNode.getAttribute("updated") & " target=""_blank"">" & articleNode.selectSingleNode("headline").text & "</a><br>"

	End if		

End If
Medlem sedan nov. 20031 018 inlägg
#4

Får inte fram en enda nyhet med den koden.

Medlem sedan dec. 1999707 inlägg
#5

Ändrade så den visar de x först nyheterna samt att den hämtar ingressen med en function.

Const TOP = 5

Set XMLDoc = CreateObject("MSXML2.DOMDocument.4.0")
XMLDoc.setProperty "ServerHTTPRequest", true
XMLDoc.async=false
XMLDoc.Load "http://expressen.se/expressen/jsp/xml.jsp?page=10"
If XMLDoc.parseError.errorCode = 0 Then

	Set articles =	XMLDoc.selectNodes("page/article[position() <= " & TOP & "]")
	For Each articleNode in articles

		response.write "<a href=http://skene.nu/nyheter_klick.asp?id=4&url=http://www.expressen.se/index.jsp?a=" & articleNode.getAttribute("updated") & " target=""_blank"">" & articleNode.selectSingleNode("headline").text & "</a><br>" & vbCrLf
		sIngress =	TransformIngress(articleNode.selectSingleNode("ingress"))
		Response.Write sIngress & "<br><br>"

	Next

Else
	Response.Write "Error: " & XMLDoc.parseError.reason
End If

Function TransformIngress(ingressNode)
	Dim s, node
	If ingressNode Is Nothing then	Exit Function
	For Each node in ingressNode.childNodes
		If node.nodeType = 1 then		' NODE_ELEMENT (1)
			If node.tagName = "newline" then
				s = s & "<br>"
			End if
		ElseIf node.nodeType = 4 then	' NODE_CDATA_SECTION (4)
			s = s & node.text
		End if
	Next
	TransformIngress = s
End Function
Medlem sedan nov. 20031 018 inlägg
#6

den funkar men jag vill bara ha med rubriken.

Medlem sedan juni 200032 967 inlägg
#7

Då är det väl inga problem att modifiera tohas kod så den gör det du vill?

Medlem sedan nov. 20031 018 inlägg
#8

Hmm det luriga är ju att förstå den ;) :stud

Medlem sedan dec. 1999707 inlägg
#9

Om du inte vill ha med ingressen kommenterar du bara bort två rader:

		' sIngress =	TransformIngress(articleNode.selectSingleNode("ingress"))
		' Response.Write sIngress & "<br><br>"

Och då kan du även ta bort funktionen. Det skulle i sådana fall bli såhär:

Const TOP = 5

Set XMLDoc = CreateObject("MSXML2.DOMDocument.4.0")
XMLDoc.setProperty "ServerHTTPRequest", true
XMLDoc.async=false
XMLDoc.Load "http://expressen.se/expressen/jsp/xml.jsp?page=10"
If XMLDoc.parseError.errorCode = 0 Then

	Set articles =	XMLDoc.selectNodes("page/article[position() <= " & TOP & "]")
	For Each articleNode in articles

		response.write "<a href=http://skene.nu/nyheter_klick.asp?id=4&url=http://www.expressen.se/index.jsp?a=" & articleNode.getAttribute("updated") & " target=""_blank"">" & articleNode.selectSingleNode("headline").text & "</a><br>" & vbCrLf

	Next

Else
	Response.Write "Error: " & XMLDoc.parseError.reason
End If
252 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)