'invalid', 'root' => '', 'error' => 'empty body']; } if (stripos($body, ' 'invalid', 'root' => '', 'error' => 'html body']; } if (!class_exists('DOMDocument')) { return ['status' => 'unknown', 'root' => '', 'error' => 'parser unavailable']; } $previous = libxml_use_internal_errors(true); $doc = new DOMDocument(); $loaded = @$doc->loadXML($body, LIBXML_NONET | LIBXML_COMPACT); libxml_clear_errors(); libxml_use_internal_errors($previous); if (!$loaded) { return ['status' => 'invalid', 'root' => '', 'error' => 'malformed xml']; } $root = strtolower((string) $doc->documentElement?->nodeName); if (!in_array($root, ['urlset', 'sitemapindex'], true)) { return ['status' => 'invalid', 'root' => $root, 'error' => 'unexpected root']; } return ['status' => 'valid', 'root' => $root, 'error' => '']; } }