2011-08-15 3 views
0

J'ai besoin d'analyser un fichier XML et j'ai besoin d'analyser le doctype. J'ai essayé avec XML Reader mais quand j'ai trouvé un nodetype 10 (doctype), je ne peux pas obtenir sa valeur.XMLReader et doctype

Il existe un moyen d'extraire le doctype d'un fichier XML, avec XMLReader?

Modifier: comme demandé, un exemple de code. Cependant, ce n'est rien d'autre qu'une décharge, en ce moment.

$reader = new XMLReader(); 
$filename = 'test.xhtml'; 
$reader->open($filename); 
while($reader->read()) 
{ 
    $nodeType = $reader->nodeType; 
    $nodeName = $reader->name; 
    $nodeValue = $reader->value; 
    if($nodeType == 10) 
    { 
     echo $nodeType ."\n"; 
     echo $nodeName ."\n"; 
     echo $nodeValue ."\n"; 
     echo $reader->localName ."\n"; 
     echo $reader->namespaceURI ."\n"; 
     echo $reader->prefix ."\n"; 
     echo $reader->xmlLang ."\n"; 
     echo $reader->readString() . "\n"; 
     echo $reader->readInnerXML() . "\n"; 
     while($reader->moveToNextAttribute()) 
     { 
      echo $reader->name . "=" . $reader->value; 
     } 
} 
+0

Essayez un var_dump() de l'objet lecteur? –

+0

@ Steve81 Pouvez-vous poster du code s'il vous plaît –

Répondre

0

Vous pouvez utiliser DOM pour lire les données DOCTYPE:

$doc = new DOMDocument(); 
$doc->loadXML($xmlData); 
var_dump($doc->doctype->publicId); 
var_dump($doc->doctype->systemId); 
var_dump($doc->doctype->name); 
var_dump($doc->doctype->entities); 
var_dump($doc->doctype->notations); 
0

Je ne l'ai pas trouvé un moyen de le faire avec XMLReader malgré beaucoup de recherche. Cependant vous pouvez utiliser DOMDocument pour lire le doctype assez facilement, puis revenir à XMLReader pour lire le reste du flux. Par exemple, pour obtenir la partie ID système du doctype avant de traiter le reste du fichier 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 

Je suppose que cela peut ne pas être pratique en toutes circonstances, mais cela a fonctionné pour moi lors du traitement de très gros fichiers XML pour lequel j'avais besoin de lire l'ID du système du doctype.