 113924fb11
			
		
	
	
		113924fb11
		
	
	
	
	
		
			
			git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1507 fd906abe-77d9-0310-91a1-e0d9ade77398
		
			
				
	
	
		
			103 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| XML (and XHTML) Generation
 | |
| ==========================
 | |
| 
 | |
| The elements generator lets you easily create snippets of XML or XHTML:
 | |
| 
 | |
|   >>> from cybertools.xml.element import elements as e
 | |
|   >>> doc = e.html(
 | |
|   ...     e.head(e.title(u'Page Title')),
 | |
|   ...     e.body(
 | |
|   ...       e.div(u'The top bar', class_=u'top'),
 | |
|   ...       e.div(u'The body stuff', class_=u'body'),
 | |
|   ... ))
 | |
| 
 | |
|   >>> print doc.render()
 | |
|   <html>
 | |
|     <head>
 | |
|       <title>
 | |
|         Page Title
 | |
|       </title>
 | |
|     </head>
 | |
|     <body>
 | |
|       <div class="top">
 | |
|         The top bar
 | |
|       </div>
 | |
|       <div class="body">
 | |
|         The body stuff
 | |
|       </div>
 | |
|     </body>
 | |
|   </html>
 | |
| 
 | |
| An XML element thus created may be converted to an ElementTree (the standard
 | |
| implementation in fact uses an lxml.etree structure as its basis):
 | |
| 
 | |
|   >>> doc.renderTree()
 | |
|   '<html><head><title>Page Title</title></head><body><div class="top">The top bar</div><div class="body">The body stuff</div></body></html>'
 | |
| 
 | |
|   >>> tree = doc.makeTree()
 | |
|   >>> tree.findtext('head/title')
 | |
|   'Page Title'
 | |
| 
 | |
|   >>> xml = ('<html><head><title>Page Title</title></head><body>'
 | |
|   ... '<div class="top">The top bar</div>'
 | |
|   ... '<div class="body">The body stuff</div></body></html>')
 | |
|   >>> from cybertools.xml.element import fromXML
 | |
|   >>> doc = fromXML(xml)
 | |
|   >>> print doc.render()
 | |
|   <html>
 | |
|     <head>
 | |
|       <title>
 | |
|         Page Title
 | |
|       </title>
 | |
|     </head>
 | |
|     <body>
 | |
|       <div class="top">
 | |
|         The top bar
 | |
|       </div>
 | |
|       <div class="body">
 | |
|         The body stuff
 | |
|       </div>
 | |
|     </body>
 | |
|   </html>
 | |
| 
 | |
| Alternative Notation
 | |
| --------------------
 | |
| 
 | |
| We can also create such a structure by successively adding elements
 | |
| just by accessing an element's attributes:
 | |
| 
 | |
|   >>> doc = e.html
 | |
|   >>> dummy = doc.head.title(u'Page Title')
 | |
|   >>> body = doc.body
 | |
|   >>> div1 = body.div(u'The top bar', class_=u'top')
 | |
|   >>> div2 = body.div(u'The body stuff', class_=u'body')
 | |
|   >>> print doc.render()
 | |
|   <html>
 | |
|     <head>
 | |
|       <title>
 | |
|         Page Title
 | |
|       </title>
 | |
|     </head>
 | |
|     <body>
 | |
|       <div class="top">
 | |
|         The top bar
 | |
|       </div>
 | |
|       <div class="body">
 | |
|         The body stuff
 | |
|       </div>
 | |
|     </body>
 | |
|   </html>
 | |
| 
 | |
|   >>> for text in (u'Welcome', u'home'):
 | |
|   ...     p = div2.p(text, style='font-size: 80%;')
 | |
|   >>> print doc.render()
 | |
|   <html>...<p...>...</p>...
 | |
| 
 | |
|   >>> x = p('Some more text').b('bold text')
 | |
|   >>> x = p('and normal again')
 | |
|   >>> print p.render()
 | |
|   <p...>...home...Some more text
 | |
|     <b>...bold text...</b>
 | |
|     ...and normal again
 | |
|   </p>
 | |
| 
 |