XMLReader и doctype - PullRequest
       25

XMLReader и doctype

0 голосов
/ 15 августа 2011

Мне нужно проанализировать файл XML, а также проанализировать тип документа. Я пытался с XML Reader, но когда я нашел тип узла 10 (doctype), я не могу получить его значение.

Есть способ извлечь тип документа из файла XML с помощью XMLReader?

Редактировать: как было предложено, пример кода. однако сейчас это не что иное, как свалка.

$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;
        }
}

Ответы [ 2 ]

0 голосов
/ 19 ноября 2015

Я не нашел способа сделать это с 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, для которых мне нужно было прочитать системный идентификатор из типа документа.

0 голосов
/ 31 июля 2012

Вы можете использовать DOM для чтения данных 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);
...