Я не нашел способа сделать это с XMLReader, несмотря на то, что много смотрел. Однако вы можете использовать DOMDocument, чтобы довольно легко прочитать тип документа, а затем вернуться к XMLReader для чтения остальной части потока. Например, чтобы получить системный идентификатор части типа документа перед обработкой остальной части XML-файла:
$doc = new DOMDocument();
$doc->load($xmlfile);
$systemId = $doc->doctype->systemId;
unset($doc);
// Then proceed with XMLReader:
$reader = new XMLReader();
$reader->open($xmlfile);
while($reader->read())
{
// etc
Я полагаю, что это не может быть практичным при всех обстоятельствах, но это сработало для меня при обработке очень больших файлов XML, для которых мне нужно было прочитать системный идентификатор из типа документа.