webForumDet fria alternativet

Läsa del ur xml med asp

ASP

13 svar · 661 visningar · startad av Melitta

Medlem sedan sep. 2003448 inlägg
Frågan#1

Ok, så här ligger det till. Jag har en xml fil med alla mina filmer i, jag vill nu lista lista visa av värdena per dvd med asp, jag har redan åstakommit det om ni kollar på http://www.hjd.se/film.asp
Problemet kommer när jag försöker få ut actors. Får bara inte till det..
Tips på bättre sätt att lista ut det än det jag gör uppskattas..

min kod just nu: (första xml försöket btw)

<%
Response.Buffer = True

Dim xml
	Set xml = Server.CreateObject("Microsoft.XMLDOM")
	xml.async = False
	xml.load (Server.MapPath("../collection.xml"))

	if request("id") <> "" then
	set x = xml.documentElement.childNodes(request("id")-1)	
	
	set strTitle = x.getElementsByTagName("Title")
	set strPm = x.getElementsByTagName("Overview")
			
	set arrGenre = x.getElementsByTagName("Genre")
	set strTime = x.getElementsByTagName("RunningTime")
	set strStudios = x.getElementsByTagName("Studio")

	strImage = x.childNodes(0).text
	
	genreList = ""
	for each item in arrgenre
		genreList = genreList& item.text & ", "
	next
	
		%>
		<h1><%=strTitle.item(0).text%></h1>
		<div class="information"><strong>Kategori:</strong> <%if genreList <> "" then response.write left(genreList,len(genreList)-2) else response.write "N/A"%> | <strong>Speltid:</strong> <%=strTime.item(1).text%> min.</div>
		<p><img id="cover" src="http://www.intervocative.com/cgi-bin/data/myprofiler/images/<%=strImage%>f.jpg" style="float:left;margin-right:10px;border:1px solid #aaa;" alt="<%=strTitle.item(0).text%>" />
		<%if (strPm.length-1 = 1 ) then _
				response.write strPm.item(1).text else _
					response.write "N/A"
		%></p>
		<p style="clear:left;"><strong>Director:</strong> <br />
		  <strong>Skådisar:</strong><%

			
			response.write actorsList

		  %><br />
	      <strong>Studio:</strong> <%
		  if not strStudios.length - 1 = 0 then
		  for i = 0 to strStudios.length - 1
			
			response.write strStudios.item(i).text
			if not i = strStudios.length - 1 then response.write ", "
		  next
		  else 
		  response.write "N/A"
		  end if
		  %></p>
	<%
	else
	
		i = 1
		response.write "<ul>"
		for each x in xml.documentElement.childNodes
		  response.write "<li><a href=""?id=" & i & """>" & x.childNodes(4).text & "</a></li>"
		  i = i + 1
		next
		response.write "</ul>"
	end if
	
	
	Set xml = Nothing
%>

Den delen av filen som jag inte kan klura ut hur jag ska hämta:

<collection>
<dvd>

' Massor av andra "fält" här, se hela xml filen längs ned i denna post. 

<Actors>
    <Actor>
      <FirstName>Lindsay</FirstName>
      <LastName>Lohan</LastName>
      <Role>Mary Elizabeth Cep/Lola</Role>
    </Actor>
    <Actor>
      <FirstName>Adam</FirstName>
      <LastName>Garcia</LastName>
      <Role>Stu</Role>
    </Actor>
</Actors>

' Massor av andra "fält" här, se hela xml filen längs ned i denna post. 

</dvd>
</collection>

Xml filen som den är uppbyggd nedan:
http://www.hjd.se/collection.xml (ca 2mb)

Lessen om jag postat i fel del, ber då moderator att flytta inlägget till rätt forum.

Medlem sedan dec. 20025 483 inlägg
#2
set actors = x.selectNodes("Actors/Actor")
for each actor in actors
  set fn = actor.selectSingleNode("FirstName")
  set ln = actor.selectSingleNode("LastName")
  set role = actor.selectSingleNode("Role")
  'use fn.text, ln.text, role.text
next
Medlem sedan sep. 2003448 inlägg
#3

Thats gräjt, kan man på nått sätt styra hur många roller som skrivs ut? Vill att dom 3-5 första ska skrivas ut, annars blir det så många

Medlem sedan dec. 20025 483 inlägg
#4

Alla för- och efternamn men endast 3–5 roller? Då

set actors = x.selectNodes("Actors/Actor")
roleCounter = 1
for each actor in actors
  set fn = actor.selectSingleNode("FirstName")
  set ln = actor.selectSingleNode("LastName")
  'use fn.text, ln.text
  if roleCounter < 6 then
    set role = actor.selectSingleNode("Role")
    'use role.text
    roleCounter = roleCounter + 1
  end if
next
Medlem sedan sep. 2003448 inlägg
#5

Jo jag kom på det, tusen tack för hjälpen :)
Har bara en fråga kvar..
Just nu hämtar jag ju den film jag är ute efter med id som är genererat på sidan innan, kan man söka poster i xml på något annat sätt en detta?

set x = xml.documentElement.childNodes(request("id")-1)
Medlem sedan dec. 20025 483 inlägg
#6

Istället för att ha ett <ID>-element skulle du kunna skriva <dvd id="...">, och sedan söka rätt på en film enligt

set x = xml.documentElement.selectSingleNode("dvd[@id = '" & request("id") & "']")
Medlem sedan sep. 2003448 inlägg
#7

ok, problemet är väll bara att filen genereras av ett program så jag har tyvär ingen större kontroll över hur xml filen utformas tyvär. Men tack iallafall :)

Medlem sedan dec. 20025 483 inlägg
#8

Då kan du testa:

set x = xml.documentElement.selectSingleNode("DVD/ID[text() = '" & request("id") & "']")
Medlem sedan sep. 2003448 inlägg
#9

Det ville sig tyvär inte, det får väll gå som det är men det hadde ju varit smidigare på annat sätt.

Medlem sedan dec. 20025 483 inlägg
#10

Med ovanstående får du ut <ID>-noden. Lägger du på .parentNode hamnar du på <DVD>-noden.

Medlem sedan sep. 2003448 inlägg
#11

aha, det kan ju vara nått kanakse, ska testa..

Medlem sedan sep. 2003448 inlägg
#12

Guldstjärna till dig, det funkade aldeles utmärkt..
Åter igen, tack mannen :)

Medlem sedan sep. 2003448 inlägg
#13

Kan man lista fler än en nod om man t,ex skulle vilja lista alla filmer som låg i kategorin komedi?

Medlem sedan dec. 20025 483 inlägg
#14

För att hämta fler än en nod kan selectNodes() användas. Metoderna tar likadana argument (XPath-uttryck):

set nodes = xmlDoc.documentElement.selectNodes("DVD/Genres/Genre[text() = 'Comedy']")
for i = 0 to nodes.length-1
  set node = nodes.item(i).parentNode.parentNode.selectSingleNode("Title")
  response.write node.text & "<br>"
next
283 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
155 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)