Neste post, teremos um exemplo bem basico para criar uma estrutura em HTML usando a extensao DOM do PHP5 para geracao de XML. Esta geracao do XML foi encapsulada em uma classe XDom que esta disponivel no github.Sempre que preciso criar um XML atraves do PHP, uso a DOM extension que ja fornece as classes DOMDocument, Element e todas mais que implementam a especificacao DOM disponivel no W3C .Porem as vezes quando o XML possui elementos com muitos atributos (que pode ser o caso de algumas estruturas HTML), o codigo comeca a ficar grande e na minha opiniao um pouco poluido.Para melhorar um pouco a situacao nos meus projetos pessoais acabei criando uma classe bem simples, mas bem simples mesmo. Portanto caso alguem queira criticar a simplicidade da classe e tiver ideias para contribuir, fique a vontade pois o codigo esta disponivel no github: https://github.com/adolfoweloy/xdomBom, entao vamos direto ao assunto, que e o codigo em si:O codigo abaixo e a implementacao da classe que encapsula um pouco a complexidade do DOMDocument (ainda encapsula muito pouco - praticamente o principal aqui e encapsular o modo de definir os atributos de um elemento xml).<?php/** * XDom: a simple facade for DOMDocument class from PHP * The intent of this is to allow someone to write less code when dealing with XML Creation. * XDom isn't dealing with XML reading. You can improve it if you want. */class XDom { private $doc = null; /** * private constructor to force user to use createDocument static method */ private function __construct($doc) { $this->doc = $doc; } /** * create an instance of XDom agregating it with an instance of DOMDocument. * @return XDom */ public static function createDocument() { $doc = new DOMDocument('1.0'); $dom = new XDom($doc); return $dom; } /** * creates an element that may have attributes represented with an associative array. * @param string $name the name of the element * @param array $attributes associative array with attribute name and attribute value respectively * @return Element */ public function createElement($name, $attributes = array()) { $el = $this->doc->createElement($name); foreach ($attributes as $attr_name => $attr_value) { $el->setAttribute($attr_name, $attr_value); } return $el; } /** * append the $el to the DOMDocument encapsulated by XDom. * @param Element $el the element to be appended within the document. * @return void */ public function appendToDocument($el) { $this->doc->appendChild($el); } /** * appends an element inside another element. * @param Element $el element that will receive another element to append * @param Element $element_to_append element to be inserted within the first Element * @return void */ public function appendChildTo($el, $element_to_append) { $el->appendChild($element_to_append); } /** * returns xml as string (as an HTML) * @return string */ public function saveHTML() { return $this->doc->saveHTML(); } /** * returns xml as string * @return string */ public function saveXML() { return $this->doc->saveXML(); }}Agora um exemplo de utilizacao:<?php require_once('xdom.php'); $xdom = XDOM::createDocument(); $dive = $xdom->createElement('div', array( 'id' => 'minhadiv', 'class' => 'divExterna')); $divi = $xdom->createElement('div', array( 'id' => 'divInterna', 'style' => 'border: 1px solid black')); $xdom->appendToDocument($dive); $xdom->appendChildTo($dive, $divi); echo $xdom->saveHTML();Bom, atraves deste post, temos