```php title="PHP" extractTextFromXml($xml); return (object)[ 'content' => $text, 'mime_type' => 'application/xml', 'metadata' => [ 'root_element' => $xml->getName(), 'extraction_method' => 'custom-xml-extractor' ], 'tables' => [], 'detected_languages' => null, 'chunks' => null, 'images' => null, ]; } catch (Exception $e) { throw new Exception("XML parsing failed: " . $e->getMessage()); } } public function supportedMimeTypes(): array { return [ "application/xml", "text/xml", "application/xhtml+xml" ]; } public function priority(): int { return 75; } private function extractTextFromXml($xml): string { $text = ""; // Extract text from all elements foreach ($xml->children() as $child) { $childText = (string)$child; if (!empty(trim($childText))) { $text .= trim($childText) . "\n"; } } return $text ?: (string)$xml; } } // Register the XML extractor $extractor = new CustomXmlExtractor(); Kreuzberg::registerDocumentExtractor($extractor); echo "XML extractor registered\n"; ```