preserveWhiteSpace = false; $dom->formatOutput = true; $dom->loadXML($simpleXmlObject->asXML()); return $dom->saveXML(); } class MyNodeVisitor extends PHPParser_NodeVisitorAbstract { public function enterNode(PHPParser_Node $node) { global $translations; if ($node instanceof PHPParser_Node_Expr_MethodCall) { if ($node->name == 'trans') { $translations[] = $node->args[0]->value->value; } } } } $file = file_get_contents('index.php'); $parser = new PHPParser_Parser(new PHPParser_Lexer); $traverser = new PHPParser_NodeTraverser; $traverser->addVisitor(new MyNodeVisitor); try { $stmts = $parser->parse($file); $stmts = $traverser->traverse($stmts); } catch (PHPParser_Error $e) { echo 'Parse Error: ', $e->getMessage(); } foreach(glob('templates/*.twig') as $file) { $content = file_get_contents($file); preg_match_all('/{% trans %}(.*){% endtrans %}/',$content,$matches); $translations = array_merge($translations,$matches[1]); } $translations = array_unique($translations); /*$xml = new SimpleXMLElement('');*/ $xml = << EOF; $xml = new SimpleXMLElement($xml); //print_r($xml); $id = 1; foreach($translations as $translation) { /** @var SimpleXMLElement $element */ $element = $xml->file->body; $element = $element->addChild('trans-unit'); $element->addAttribute('id',$id); $id++; $element->addChild('source',$translation); } print_r(format_xml($xml));