Parsování HTML pomocí regexp

lawry

Parsování HTML pomocí regexp
« kdy: 28. 04. 2011, 17:02:57 »
Parsujem HTML a potreboval by som ziskat obsah elementu identifikovaneho pomocou id/class pomocou regex/everything v PHP. Problem je najst spravny uzatvaraci tag, pretoze tag obsahuje dalsie rovnakeho typu.
« Poslední změna: 28. 04. 2011, 17:26:34 od Petr Krčmář »


Sten

Re: REGEX HTML CLOSING TAG
« Odpověď #1 kdy: 28. 04. 2011, 17:13:28 »
Proboha, proč parsujete HTML pomocí regulárních výrazů? Od toho jsou přeci DOM a SAX parsery.

Re: Parsování HTML pomocí regexp
« Odpověď #2 kdy: 28. 04. 2011, 18:55:21 »
HTML se obecně nedá parsovat regulárními výrazy. To je vědecky dokázaný fakt.

http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html

Re: Parsování HTML pomocí regexp
« Odpověď #3 kdy: 28. 04. 2011, 20:17:47 »
použil by som xpath v simplexml alebo domdocument.
http://drewish.com/content/2007/08/using_simplexml_with_html

Ak je html nevalidne, patrilo by sa ho vyčistiť ho http://php.net/manual/en/book.tidy.php

lawry

Re: Parsování HTML pomocí regexp
« Odpověď #4 kdy: 28. 04. 2011, 20:50:33 »
pouzivam http://simplehtmldom.sourceforge.net/ len ked mi pride vacsia stranka s vacsim poctom elementov tak pri spracovani mi dojde ram, preto hladam lepsi spravnejsi sposob


Re: Parsování HTML pomocí regexp
« Odpověď #5 kdy: 28. 04. 2011, 21:35:45 »
pouzivam http://simplehtmldom.sourceforge.net/ len ked mi pride vacsia stranka s vacsim poctom elementov tak pri spracovani mi dojde ram, preto hladam lepsi spravnejsi sposob
Zkus nějaký SAX parser - http://zdrojak.root.cz/clanky/php-a-xml-sax-cteme-pekne-poporadku/ - "Na rozdíl od rozhraní DOM a SimpleXML se SAX hodí pro čtení i hodně velkých dokumentů XML, protože se dokument nenačítá celý do paměti, ale čte se postupně sekvenčně."

dffd

Re: Parsování HTML pomocí regexp
« Odpověď #6 kdy: 28. 04. 2011, 21:41:04 »
Ked uz riesime tie XML parsery tak pridam aj ja:

http://vtd-xml.sourceforge.net/

Zastupca ultra rychlych parserov.

blizz

Re: Parsování HTML pomocí regexp
« Odpověď #7 kdy: 29. 04. 2011, 13:18:27 »
http://archive.msdn.microsoft.com/SgmlReader

Citace
public static class XmlDocumentUtils
{
    public static void LoadHtml(this XmlDocument document, string html)
    {
        var sgmlReader = new Sgml.SgmlReader()
        {
            DocType = "HTML",
            WhitespaceHandling = WhitespaceHandling.All,
            CaseFolding = Sgml.CaseFolding.ToLower,
            InputStream = new StringReader(html)
        };
        document.PreserveWhitespace = true;
        document.XmlResolver = null;
        document.Load(sgmlReader);
    }
}