Qual é o nível / versão do núcleo do DOM suportado pelo PHP DOM?

O que é o DOM Core Version é suportado pelo PHP DOM? Eu posso ver que há muitos diferentes listados como ( lista ):

  • Modelo de object de documento (núcleo) Nível 1 (por meio do modelo de object de documento (DOM) Nível 1 Especificação )
  • Document Object Model Core Level 2
  • Document Object Model Core Level 3

Qual deles é suportado?

A versão dom core depende da versão libxml2 em que o PHP está vinculado. Você pode até mesmo replace a versão binária da biblioteca sob o capô sem necessidade de recompilar o php. (Isso é hakish e limitado, eu sei, mas uma vez que fiz isso porque a versão debian lenny do libxml2 tinha um bug)

Para a detecção de tempo de execução desses resources nas respostas do PHP @ hakre é um bom snippet

PHP DOM Extension tem o Document Object Model (Core) Nível 1 recurso. Você pode testar resources que são implementados com um método auxiliar e depois testar resources e versões, aqui um resumo para quatro resources:

  • Encontraram versões de um núcleo : '1.0' .
  • Quatro versões XML encontradas: '2.0'; '1.0'; ''; NULL '2.0'; '1.0'; ''; NULL '2.0'; '1.0'; ''; NULL .
  • Zero versões HTML encontradas.
  • Foram encontradas versões Zero XHTML .
  • Foram encontradas versões Zero XPath .

Este resultado combina com as especificações é enigmático, se não esotérico . O Core Feature no Level 1.0 requer também retornar TRUE para uma versão não especificada (aqui: para '' e NULL ), mas como os resultados mostram, não. Então mesmo DOM Core Level 1 é anunciado como recurso, também está quebrado.

Além disso, o recurso XML não pode ser o nível 2.0 se o recurso Core do nível 2.0 não for suportado – e este é o caso aqui, o Core Level 2.0 não é um recurso suportado.

Recursos em DOM ( fonte ):

Recursos em DOM

Saída Exemplativa do meu script de exemplo:

 Core Feature is in PHP DOMDocument implementation: 1.) Core '3.0': FALSE 2.) Core '2.0': FALSE 3.) Core '1.0': TRUE 4.) Core '' : FALSE 5.) Core NULL : FALSE One Core versions found: '1.0'. XML Feature is in PHP DOMDocument implementation: 1.) XML '3.0': FALSE 2.) XML '2.0': TRUE 3.) XML '1.0': TRUE 4.) XML '' : TRUE 5.) XML NULL : TRUE Four XML versions found: '2.0'; '1.0'; ''; NULL. HTML Feature is in PHP DOMDocument implementation: 1.) HTML '3.0': FALSE 2.) HTML '2.0': FALSE 3.) HTML '1.0': FALSE 4.) HTML '' : FALSE 5.) HTML NULL : FALSE Zero HTML versions found. XHTML Feature is in PHP DOMDocument implementation: 1.) XHTML '3.0': FALSE 2.) XHTML '2.0': FALSE 3.) XHTML '1.0': FALSE 4.) XHTML '' : FALSE 5.) XHTML NULL : FALSE Zero XHTML versions found. XPath Feature is in PHP DOMDocument implementation: 1.) XPath '3.0': FALSE 2.) XPath '2.0': FALSE 3.) XPath '1.0': FALSE 4.) XPath '' : FALSE 5.) XPath NULL : FALSE Zero XPath versions found. 

Exemplo de script:

 loadXML(''); $versionsArray = ['3.0', '2.0', '1.0', '', NULL]; $features = [ # Document Object Model (DOM)  'Core' => $versionsArray, # Document Object Model (DOM)  'XML' => $versionsArray, # Document Object Model (DOM) Level 2 HTML Specification  'HTML' => $versionsArray, 'XHTML' => $versionsArray, # Document Object Model XPath  "XPath" => $versionsArray, ]; const DISPLAY_TITLE = 1; const DISPLAY_DETAILS = 2; const DISPLAY_SUMMARY = 4; const DISPLAY_ALL = 7; dom_list_features($dom, $features); function dom_list_features(DOMDocument $dom, array $features, $display = DISPLAY_ALL) { foreach ($features as $feature => $versions) { dom_list_feature($dom, $feature, $versions, $display); } } function dom_list_feature(DOMDocument $dom, $feature, array $versions, $display) { if ($display & DISPLAY_TITLE) { echo "$feature Feature is in PHP DOMDocument implementation:\n\n"; } $found = []; foreach ($versions as $i => $version) { $result = $dom->implementation->hasFeature($feature, $version); if ($result) { $found[] = $version; } if ($display & DISPLAY_DETAILS) { printf(" %d.) $feature %' -5s: %s\n", $i + 1, var_export($version, true), $result ? 'TRUE' : 'FALSE'); } } if ($display & DISPLAY_DETAILS) { echo "\n"; } $formatter = new NumberFormatter('en_UK', NumberFormatter::SPELLOUT); $count = ucfirst($formatter->format(count($found))); $found = array_map(function ($v) { return var_export($v, TRUE); }, $found); if ($display & DISPLAY_SUMMARY) { printf("%s %s versions found%s.\n\n", $count, $feature, $found ? ': ' . implode('; ', $found) : ''); } }