Jag har en tabell på en sida som jag vill läsa ut namnen och antal på.
<TABLE class=3Dcoolmenu>
<TBODY>
<TR>
<TD class=3Dleft>
<SPAN class=3Dbold> Kalle </SPAN> 8 st
<BR>
<SPAN=20 class=3Dbold >Nisse </SPAN> -5 st
<BR>
<SPAN =class=3Dbold> Ville </SPAN> 12 st
<BR>
<SPAN class=3Dbold> Valle = </SPAN> 99%
<BR>
</TD>
<TD class=3Dright> <SPAN class=3Dtemp> + 4 </SPAN>
<BR>
<IMG src=bla bla>
</TD>
</TR>
</TBODY>
</TABLE>
Har använt koden nedan. Frågan är vad patternmkoden ska vara. Har provat med massa alternativ men det blir fel, antingen en felkod eller en "vit" sida.
Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP")
objHTTP.Open "GET","URL", False
objHTTP.Send
strHTML=objHTTP.responseText
Set objHTTP = Nothing
With New RegExp
.Global = false
.IgnoreCase = true
.Pattern = "<table class=3Dcoolmenu> ????????</table>"
Set hittade = .Execute(strHTML)
End With
For each item in hittade
Response.Write item.value & ""
Next
Set hittade = Nothing
Tack för svaret.
Jag har provat, men det blir bara vitt på sidan.
Jag har provat med <table>.*</table>, då fungerar det, men alla tabeller på sidan visas. Så fort jag använder <table class=""3Dcoolmenu"">.*</table> så fungerar det inte. Nån som har en aning om varför det inte fungerar då?
Din HTML har på vissa ställen tecken där sådana inte bör finnas, t.ex. "<SPAN=20 class=3Dbold >". Med följande uppstädade HTML:
<TABLE class=3Dcoolmenu>
<TBODY>
<TR>
<TD class=3Dleft>
<SPAN class=3Dbold> Kalle </SPAN> 8 st
<BR>
<SPAN class=3Dbold>Nisse </SPAN> -5 st
<BR>
<SPAN class=3Dbold> Ville </SPAN> 12 st
<BR>
<SPAN class=3Dbold> Valle = </SPAN> 99%
<BR>
</TD>
<TD class=3Dright> <SPAN class=3Dtemp> + 4 </SPAN>
<BR>
<IMG src=bla bla>
</TD>
</TR>
</TBODY>
</TABLE>
...och följande ASP-kod:
Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP")
objHTTP.Open "GET","http://localhost/tmp.asp", False
objHTTP.Send
strHTML=objHTTP.responseText
Set objHTTP = Nothing
dim hittade
With New RegExp
.Global = false
.IgnoreCase = true
.Pattern = "<table class=3Dcoolmenu>(?:(?:.|\s)*?)</table>"
Set hittade = .Execute(strHTML)
End With
if hittade.count <> 0 then
dim s
s = hittade(0)
set hittade = nothing
with new regexp
.global = true
.ignorecase = true
.pattern = "<span class=3dbold>(.*?)</span>\s*((?:.|\s)*?)<br>"
set hittade = .execute(s)
end with
for i = 1 to hittade.count
response.write "[" & (i-1) & "]: name = " & hittade(i-1).submatches(0) & ", count = " & hittade(i-1).submatches(1) & "<br>"
next
end if
...får jag:
[0]: name = Kalle , count = 8 st
[1]: name = Nisse , count = -5 st
[2]: name = Ville , count = 12 st
[3]: name = Valle = , count = 99%
Tack för svaret!
Sidan jag hämtar värdena ur ser ut som jag beskrev, och jag kan alltså inte städa upp HTML.
Jag fick det tyvärr inte att fungera.
Jag har dock en annan fråga, jag försöker att hämta ett klockslag ur följande kod:
<td>
<img src="bla bla alt="bla bla""/>
08:44
</td>
och använder koden:
<%
Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP")
objHTTP.Open "GET","URL", False
objHTTP.Send
strHTML=objHTTP.responseText
Set objHTTP = Nothing
Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.Pattern = "<td>.*</td>"
Set hittade = objRegExp.Execute(strHTML)
Set hittade = objRegExp.Execute(strHTML)
Response.Write "" & hittade(1) & "<br>"
%>
Svaret blir en tom ruta där bilden skulle vara och efter den kommer klockslaget.
Hur ska regexp pattern se ut för att "bilden" inte ska komma med, utan bara klockslaget?
Har läst om regexp pattern på diverse sidor men har inte koll på hur det ska vara.
With New RegExp
.Global = false
.IgnoreCase = true
.Pattern = "<td>\s*<img[^>]+>\s*([^\s]*?)\s*</td>"
Set hittade = .Execute(strHTML)
End With
If hittade.count > 0 then
response.write hittade(0).submatches(0)
end if
Nu ytterligare en fråga.
Finns det någon syntax för att kunna visa bilder från en annan sida? När man använder regexp blir det ju bara en ram där bilden skulle vara. Vad jag förstår så används regexp bara till text.
264 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25