Feedback

HRTL-Wrapper für Websites

6

using System;
using System.Collections.Generic;
using System.Net;
using System.Web;

class HLRT_Wrapper
{
    WebClient webClient;
    public HLRT_Wrapper()
    {
        webClient = new WebClient();
    }

    public List<List<String>> parseWebsite(string address, string head, string tail, params Element[] elemente)
    {
        List<List<String>> result = new List<List<String>>();
            
        string source = HttpUtility.HtmlDecode(webClient.DownloadString(address));

        int leftIndex = source.IndexOf(head);
        int rightIndex = source.IndexOf(head);
        while (true)
        {
            for (int i = 0; i < elemente.Length; i++)
            {
                leftIndex = source.IndexOf(elemente[i].left, rightIndex + 1);
                rightIndex = source.IndexOf(elemente[i].right, leftIndex + 1);

                if (rightIndex > source.IndexOf(tail) || leftIndex == -1 || rightIndex == -1)
                    return result;

                string text = source.Substring(leftIndex + elemente[i].leftDistance, rightIndex - leftIndex - elemente[i].leftDistance - elemente[i].rightDistance);

                if (result.Count < i + 1)
                    result.Add(new List<String>());
                result[i].Add(text);
            }
        }
    }

    public class Element
    {
        public string left { get; set; }
        public int leftDistance { get; set; }
        public string right { get; set; }
        public int rightDistance { get; set; }

        public Element(string left, int leftDistance, string right, int rightDistance)
        {
            this.left = left;
            this.leftDistance = leftDistance;
            this.right = right;
            this.rightDistance = rightDistance;
        }
    }
}

public void parseDotnetSnippets()
{
    HLRT_Wrapper wrapper = new HLRT_Wrapper();

    HLRT_Wrapper.Element sprache = new HLRT_Wrapper.Element("col1">""

1 Kommentar

  1. Das ist korrekt, der Startindex des 2. Elements liegt nach dem Endindex des 1. Elements, deshalb funktioniert es nur mit der Reihenfolge, wie sie auch im Quelltext ist.
    Man könnte das Ganze so umschreiben, dass die Reihenfolge egal wäre, allerdings befinden sich manchmal zwischen den Elementen nicht eindeutige Identifier, sodass man sich sozusagen von Element zu Element hangelt.

    Das HtmlAgilityPack kannte ich tatsächlich noch nicht, das wirkt auf jeden Fall deutlich besser und professioneller als mein Code. 🙂