public static function toPO($xmlstr, XSLTProcessor $xslt = NULL)
 {
     if ($xslt != NULL) {
         //$doc = DOMDocument::loadXML($xmlstr);
         $doc = new DOMDocument();
         $doc->loadXML($xmlstr, LIBXML_NOCDATA);
         // TEST: hay 252
         $xpath = new DOMXPath($doc);
         $nodelist = $xpath->query('//cuerpo/personas/persona');
         echo 'Hay ' . $nodelist->length . ' nodos persona<br/>';
         $xmlstr = $xslt->transformToXML($doc);
     }
     if ($xmlstr === NULL) {
         echo 'la transformacion retorna NULL<br/>';
         return null;
     }
     // DEBUG
     //FileSystem::write('archivo_transformado_alta_pac.xml', $xmlstr);
     // Tengo que cargar todas las clases de la aplicacion actual porque
     // se como se llaman, pero no se donde estan.
     YuppLoader::forceReload();
     YuppLoader::loadModel();
     // FIXME: no carga las clases del imp!
     //print_r(YuppLoader::getLoadedClasses());
     // Parseo el XML (deberia tener el formato de toXML)
     $xml = simplexml_load_string($xmlstr);
     // TEST: hay 252!
     $arr = $xml->xpath('//IMPPersona ');
     echo "En el transformado hay " . count($arr) . " personas<br/>";
     // Referencias a paths con objetos para resolver referencias por loops
     $pathObj = new ArrayObject();
     // ***
     // TODO: ver si el nodo raiz es un objeto simple o una coleccion.
     // <personas type="collection" of="IMPPersona">
     if (!empty($xml['type']) && $xml['type'] == 'collection') {
         // TEST:
         // 252 nodos!
         echo count($xml->children()) . "<br/>";
         // nodes, parentAttr, path, pathObj
         $list_po = self::toPOCollection($xml->children(), '/' . $xml->getName(), $pathObj);
         // TEST: error hay 381 personas!
         echo "Hay " . count($list_po) . " en la lista de PO<br/>";
         return $list_po;
     }
     // Para el primer nodo, la clase es el nombre del elemento
     $class = $xml->getName();
     $po = self::toPOSingle($class, $xml, '', -1, $pathObj);
     // TODO: no necesito loop detection para no entrar en loops infinitos,
     // lo necesito para resolver referencias a nodos, y reflejarlo en el PO que estoy creando.
     //$loopDetection = new ArrayObject();
     //self::toXMLSingle( $po, $xml_dom, $xml_dom, $recursive, $loopDetection );
     /*
     if ($xslt === NULL)
        return $xml_dom->saveXML();
     else
        return $xslt->transformToXML( $xml_dom );
     */
     //print_r($pathObj);
     return $po;
 }