View Full Version : Optimera MSXML2.DOMDocument (expressen)?
Bosse168
2004-08-18, 00:59
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
%>
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
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
Bosse168
2004-08-19, 20:47
Får inte fram en enda nyhet med den koden.
Ä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
Bosse168
2004-08-20, 12:05
den funkar men jag vill bara ha med rubriken.
Då är det väl inga problem att modifiera tohas kod så den gör det du vill?
Bosse168
2004-08-20, 12:07
Hmm det luriga är ju att förstå den ;) :stud
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
vBulletin® v3.8.6, Copyright ©2000-2013, Jelsoft Enterprises Ltd.