PHP XMLReader, obtenha a versão e codificação
Atualmente estou reescrevendo uma classe PHP que tentou dividir um arquivo XML em partes menores para usar XMLReader e XMLWriter em vez da abordagem atual do sistema de arquivos básico e regex.
No entanto, não consigo descobrir como obter a versão, codificação e sinalizadores independentes do preâmbulo XML.
O início do meu arquivo XML de teste é assim:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fakedoctype SYSTEM "fake_doc_type.dtd">
<!--
This is a comment, it's here to try and get the parser to break in some way
-->
<root attribute="value" otherattribute="othervalue">
Eu posso abri-lo bem com o leitor e percorrer o documento com read (), next () etc, mas eu simplesmente não consigo obter o que está em<?xml ... ?>
. A primeira coisa que consigo acessar é o DOCTYPE falso.
Meu código de teste é o seguinte:
$a = new XMLReader ();
var_dump ($a -> open ('/path/to/test/file.xml')) // true
var_dump ($a -> nodeType); // 0
var_dump ($a -> name); // ""
var_dump ($a -> readOuterXML ()); // ''
var_dump ($a -> read ()); // true
var_dump ($a -> nodeType); // 10
var_dump ($a -> readOuterXML ()); // <!DOCTYPE fakedoctype SYSTEM "fake_doc_type.dtd">
É claro que eu poderia sempre assumir XML 1.0, codificando UTF8 e standalone = yes, mas por uma questão de correção eu realmente preferiria ser capaz de pegar os valores do meu feed de origem e usá-los ao gerar os arquivos divididos.
A documentação no XMLReader e XMLwriter parece ser muito pobre, então há toda chance que eu perdi algo nos documentos. Alguém sabe o que fazer neste caso?