Je fini par écrire la fonction suivante. Il semble faire le travail pour mes fins. Je sais que c'est un peu sale, mais le code HTML de la plupart des pages Web l'est aussi.
Si quelqu'un peut signaler les défauts principaux, s'il vous plaît faire:
private static readonly Regex rxDivTag = new Regex(
@"<(?<close>/)?div(\s[^>]*?)?(?<selfClose>/)?>",
RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | RegexOptions.Singleline);
private const string RXCAP_DIVTAG_CLOSE = "close";
private const string RXCAP_DIVTAG_SELFCLOSE = "selfClose";
private static List<string> GetProductDivs(string pageText, int start)
{
bool success = true;
int curr = start + 1;
for (Match matchNextTag = rxDivTag.Match(pageText, curr) ; depth > 0 ; matchNextTag = rxDivTag.Match(pageText, curr))
{
if (matchNextTag == Match.Empty)
{
success = false;
break;
}
if (matchNextTag.Groups[RXCAP_DIVTAG_CLOSE].Success)
{
if (matchNextTag.Groups[RXCAP_DIVTAG_SELFCLOSE].Success)
{
success = false;
break;
}
--depth;
}
else if (!matchNextTag.Groups[RXCAP_DIVTAG_SELFCLOSE].Success)
{
++depth;
}
curr = matchNextTag.Index + matchNextTag.Length;
}
if (success)
{
return pageText.Substring(start, curr - start);
}
else
{
return null;
}
}
Qu'est-ce que OFFSET utilisez-vous? C'est un nombre de caractères ou un nombre de niveaux à descendre dans la hiérarchie? – EndangeredMassa
Le décalage correspond au nombre de caractères. Le document n'est pas analysé, il n'y a donc pas d'informations sur les balises et leur contenu interne. – Ghostrider
Est-ce que non standard signifie: 1. Vous ne voulez rien qui ne soit pas inclus dans le cadre .NET lui-même. OU 2. Vous ne voulez pas de bibliothèques qui effectuent des appels au code non managé. – SamuelWarren