XMLReader和doctype

时间:2011-08-15 17:22:07

标签: php doctype xmlreader

我需要解析XML文件,我还需要解析doctype。我尝试过使用XML Reader但是当我发现nodetype 10(doctype)时,我无法获得它的价值。

有一种方法可以使用XMLReader从XML文件中提取doctype吗?

编辑:根据要求,提供一些示例代码。然而,现在只不过是一个转储。

$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 :(得分:0)

您可以使用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);

答案 1 :(得分:0)

尽管看起来很多,我还没有找到使用XMLReader的方法。但是,您可以使用DOMDocument轻松读取doctype,然后恢复为XMLReader以读取流的其余部分。例如,要在处理XML文件的其余部分之前获取doctype的系统ID:

$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文件时,它对我有用,我需要从doctype中读取系统ID。