Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: lawry 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.
-
Proboha, proč parsujete HTML pomocí regulárních výrazů? Od toho jsou přeci DOM a SAX parsery.
-
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
-
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
-
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
-
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/ (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ě."
-
Ked uz riesime tie XML parsery tak pridam aj ja:
http://vtd-xml.sourceforge.net/
Zastupca ultra rychlych parserov.
-
http://archive.msdn.microsoft.com/SgmlReader
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);
}
}