Examples ======== Creating HTML ============= You can create and output HTML like this: from ll.xist import xsc from ll.xist.ns import html, xml, meta node = xsc.Frag( xml.XML10(), html.DocTypeXHTML10transitional(), html.html( html.head( meta.contenttype(), html.title("Example page") ), html.body( html.h1("Welcome to the example page"), html.p( "This example page has a link to the ", html.a("Python home page", href="http://www.python.org/"), "." ) ) ) ) print node.conv().asBytes(encoding="us-ascii") Defining new elements ===================== You can define new elements and how they should be converted to HTML (or other XML vocabularies) like this: from ll.xist import xsc from ll.xist.ns import html, xml, meta class pypilink(xsc.Element): class Attrs(xsc.Element.Attrs): class name(xsc.TextAttr): pass def convert(self, converter): e = html.a( self["name"], href=("http://www.python.org/pypi?:action=display&name=", self["name"]) ) return e.convert(converter) names = ["ll-xist", "cx_Oracle", "PIL"] node = xsc.Frag( xml.XML10(), html.DocTypeXHTML10transitional(), html.html( html.head( meta.contenttype(), html.title("PyPI links") ), html.body( html.h1("PyPI links"), html.ul(html.li(pypilink(name=name)) for name in names) ) ) ) print node.conv().asBytes(encoding="us-ascii") Parsing HTML ============ Parsing HTML is done like this: from ll.xist import parsers node = parsers.parseURL("http://www.python.org/", tidy=True) p u Finding and counting nodes ========================== The following example shows you how to output the URLs of all images inside links on Python's homepage: >>> from ll.xist import parsers >>> from ll.xist.ns import html >>> node = parsers.parseURL("http://www.python.org/", utidy=True) >>> for img in node//html.a/html.img: ... print img["src"] ... http://www.python.org/images/python-logo.gif http://www.python.org/images/trans.gif http://www.python.org/images/trans.gif http://www.python.org/images/success/nasa.jpg If you want to output both the links and the image URLs, do the following: >>> from ll.xist import parsers, xfind >>> from ll.xist.ns import html >>> node = parsers.parseURL("http://www.python.org/", tidy=True) >>> for link in node//html.a/xfind.contains(html.img): ... print link["href"], str((link/html.img)[0]["src"]) http://www.python.org/ http://www.python.org/images/python-logo.gif http://www.python.org/#left%2dhand%2dnavigation http://www.python.org/images/trans.gif http://www.python.org/#content%2dbody http://www.python.org/images/trans.gif http://www.python.org/about/success/usa http://www.python.org/images/success/nasa.jpg If you want to count the number of links on the page you can do the following: >>> from ll import misc >>> from ll.xist import parsers >>> from ll.xist.ns import html >>> node = parsers.parseURL("http://www.python.org/", tidy=True) >>> misc.count(node//html.a) 90 Replacing text ============== This example demonstrates how to make a copy of an XML tree with some text replacements: from ll.xist import xsc, parsers def p2p(node, converter): if isinstance(node, xsc.Text): node = node.replace("Python", "Parrot") node = node.replace("python", "parrot") return node node = parsers.parseURL("http://www.python.org/", tidy=True) node = node.mapped(p2p) node.write(open("parrot_index.html", "wb")) Converting HTML to XIST code ============================ The class ll.xist.presenters.CodePresenter makes it possible to output an XIST tree as usable Python source code: >>> from ll.xist import parsers, presenters >>> e = parsers.parseURL("http://www.python.org/", tidy=True) >>> print e.asrepr(presenters.CodePresenter()) ll.xist.xsc.Frag( ll.xist.ns.html.html( xsc.Comment(' THIS PAGE IS AUTOMATICALLY GENERATED. DO NOT EDIT. '), xsc.Comment(' Thu Jan 27 12:33:38 2005 '), xsc.Comment(' USING HT2HTML 2.0 '), xsc.Comment(' SEE http://ht2html.sf.net '), xsc.Comment(' User-specified headers:\nTitle: Python Programming Language\n\n'), ll.xist.ns.html.head( ll.xist.ns.html.title( 'Python Programming Language' ), ll.xist.ns.html.meta( content='text/html; charset=iso-8859-1', http_equiv='Content-Type' ), ll.xist.ns.html.meta( content='HT2HTML/2.0', name='generator' ), ll.xist.ns.html.meta( content='Python programming language object oriented web free\n source', name='keywords' ), [... Many lines deleted ...] xsc.Comment(' end of page table '), marginheight=0, alink='#ff0000', text='#000000', bgcolor='#ffffff', link='#0000bb', marginwidth=0, vlink='#551a8b' ) ) ) Using converter contexts to pass information between elements ============================================================= Converter contexts can be used to pass information between elements. The following example will generate HTML