webForumDet fria alternativet

Hämta element m.h.a. XPath och Regex

.NET

1 svar · 432 visningar · startad av dAEk

Medlem sedan feb. 20041 816 inlägg
Frågan#1

Halloj

Jag har ett dokument som jag försöker hämta ut noder från m.h.a. HtmlAgilityPack och XPath.
Först navigerar jag mig ned till en container som jag vet innehåller noderna som jag är intresserad av. Efter det blir det lite bökigare. Containern innehåller länkar som ser ut såhär:

<a href="/mapp/undermapp/sida.html?a=foo&b=bar&c=&d=slask">text...</a> 
<a href="/mapp/undermapp/sida.html?a=foo&b=bar&c=baz&d=slask">text...</a> 
<a href="/mapp/undermapp/sida.html?a=foo&b=bar&c=123&d=slask">text...</a>

M.h.a. XPath och Regex tänkte jag mig att det skulle gå att hämta ut länkarna där parametern c har ett numeriskt värde men det går sådär... Jag får följande XPathException som inte säger mig så mycket:

Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.

Kodsnutten där det smäller:

string pattern = @"/mapp/undermapp/sida.html?a=foo&b=bar&c=(\d+)&d=slask";
HtmlNodeCollection items = container.SelectNodes("//a[matches(@href, '" + pattern + "')]");

Har kollat lite på HtmlAgilityPack och man verkar kunna navigera i dokumentet utan någon XPath. Det är säkert trevligt och blir nog min reservplan om jag inte får till det här uttrycket.

Hilfe!

Medlem sedan feb. 20041 816 inlägg
#2

Det funkar inte eftersom matches-funktionen inte är implementerad i .NETs XPath-API. http://msdn.microsoft.com/en-us/library/ms256180.aspx

Löste problemet med Linq istället.

258 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)