Laden...

Guter .NET HTML Parser bekannt

Erstellt von tomaten vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.561 Views
tomaten Themenstarter:in
402 Beiträge seit 2005
vor 18 Jahren
Guter .NET HTML Parser bekannt

Hallo, kennt einer einen guten HTML Parser? Möchte ein gutes altes Win32 Projekt, dass ich erweitern soll, gleich mal technologisch anpassen. Mir fehlt eben nur ein guter HTML Parser für .NET zu meinem Glück.

Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.

32 Beiträge seit 2005
vor 18 Jahren

"Gut" ist ja immer relativ betrachtet, n'est pas? 😉.

Ich verwende den SgmlReader in einigen Projekten zu meiner vollsten Zufriedenheit.

tomaten Themenstarter:in
402 Beiträge seit 2005
vor 18 Jahren

Hm. Eine Ereignissausgabe wenn ein Tag oder Text gefunden wird brauch ich schon. Elementlisten nützen mir da nichts, z.B. (Delphi):

procedure OnText(Sender: TObject; Token: String);
procedure OnTag(Sender: TObject; HtmlTag: String; Attributes: TStringList);

Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.

32 Beiträge seit 2005
vor 18 Jahren

Tjaja, die verwöhnte Delphi-Jugend 😉.

Mir wäre das relativ wurscht, ob ich jetzt ein Ereignis bekomme oder einfach selbst SgmlReader.MoveToNextAttribute() aufrufe.

tomaten Themenstarter:in
402 Beiträge seit 2005
vor 18 Jahren

Oh danke für "Jugend" (bin 37). So genau hatte ich das Teil noch nicht betrachtet. 😉

Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.

tomaten Themenstarter:in
402 Beiträge seit 2005
vor 18 Jahren

Original von Uwe Keim
Tjaja, die verwöhnte Delphi-Jugend 😉.

Mir wäre das relativ wurscht, ob ich jetzt ein Ereignis bekomme oder einfach selbst SgmlReader.MoveToNextAttribute() aufrufe.

Gibt es dafür auch eine vernüftige Demo? Ich will doch nur parsen! 🙁

Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.

32 Beiträge seit 2005
vor 18 Jahren

Ich mache das so:

private XmlReader GetDocReader( 
	string html, 
	string baseUrl )
{
	SgmlReader r = new SgmlReader();

	if ( baseUrl.Length>0 )
	{
		r.SetBaseUri( baseUrl );
	}
	r.DocType = "HTML";
	r.InputStream = new StringReader( html );

	return r;
}

Und dann so:

/// <summary>
/// Find all links.
/// </summary>
/// <param name="xml"></param>
/// <returns></returns>
private string[] FindAllLinks( 
	XmlReader xml )
{
	ArrayList links = new ArrayList();

	while ( xml.Read() )
	{
		switch ( xml.NodeType )
		{
				// A node element.
			case XmlNodeType.Element:
				string[] linkAttributeNames;
				// If this is a link element, store the URLs to modify.
				if ( IsLinkElement( xml.Name, out linkAttributeNames ) )
				{
					while ( xml.MoveToNextAttribute() )
					{
						foreach ( string a in linkAttributeNames )
						{
							if ( a.ToLower()==xml.Name.ToLower() )
							{
								string linkUrl = xml.Value;
								if ( !IsAbsoluteUrl( linkUrl ) )
								{
									links.Add( linkUrl );
								}
							}
						}
					}
				}
				break;
		}
	}

	return (string[])links.ToArray( typeof(string) );
}

OK, vielleicht etwas kontextlos aber so verwende ich das 😉. Ich denke aber es sind auch beim Original Beispiele dabei.