Goetas\Xsd\XsdToPhp\Tests\JmsSerializer\OTA\OTASerializationTest::clearXML PHP Method

clearXML() protected method

protected clearXML ( $xml )
    protected function clearXML($xml)
    {
        $xml = str_replace("\r", "\n", $xml);
        $xml = str_replace(array('xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'), '', $xml);
        $xml = preg_replace('~xsi:[a-z]+="[^"]+"~msi', '', $xml);
        $xml = preg_replace("/" . preg_quote('<![CDATA[', '/') . "(.*?)" . preg_quote(']]>', '/') . "/mis", "\\1", $xml);
        $xml = str_replace('&', '', $xml);
        $dom = new \DOMDocument();
        if (!$dom->loadXML($xml)) {
            file_put_contents("d.xml", $xml);
        }
        $fix = function ($str) {
            $str = trim($str);
            // period
            if (preg_match("/^P([0-9]+[A-Z])+/", $str) || preg_match("/^PT([0-9]+[A-Z])+\$/", $str)) {
                $str = str_replace("N", "D", $str);
                while (preg_match("/P0+[A-Z]/", $str)) {
                    $str = preg_replace("/P0+[A-Z]/", "P", $str);
                    //P0D => P
                }
                while (preg_match("/T0+[A-Z]/", $str)) {
                    $str = preg_replace("/T0+[A-Z]/", "T", $str);
                    //T0H => T
                }
                if ($str[strlen($str) - 1] == "T") {
                    $str = substr($str, 0, -1);
                }
            }
            // boolean
            $str = str_replace(['true', 'false'], ['1', '0'], $str);
            // 'true' => '1'
            // datetime
            $str = str_replace(array('+00:00', '-05:00'), '', $str);
            $str = preg_replace('/Z$/', '', $str);
            // number
            if (is_numeric($str) && strpos($str, '.') !== false) {
                $str = floatval($str);
            } elseif (is_numeric($str)) {
                $str = intval($str);
            } else {
                $str = preg_replace('/\\.0+$/', '', $str);
                // 1.0000 => 1, .0 => ''
            }
            return $str;
        };
        $xp = new \DOMXPath($dom);
        do {
            $comments = $xp->query("//comment()|//text()[normalize-space()='']");
            $l = $comments->length;
            foreach ($comments as $comment) {
                $comment->parentNode->removeChild($comment);
            }
        } while ($l);
        foreach ($xp->query("//@*") as $attr) {
            $attr->value = $fix($attr->value);
        }
        foreach ($xp->query("//text()") as $text) {
            $text->data = $fix($text->data);
        }
        $dom->formatOutput = true;
        $dom->preserveWhitespace = true;
        return $dom->saveXML();
    }