Что такое DOM Core Level / Version, поддерживаемый PHP DOM?

Что такое версия DOM Core поддерживается PHP DOM? Я вижу, что в списке есть много разных ( список ):

  • Document Object Model (Core) Уровень 1 (с помощью спецификации объекта документа (DOM) уровня 1 )
  • Модель объекта документа Core Level 2
  • Модель объекта документа Core Level 3

Какой из них поддерживается?

Версия основного ядра зависит от версии libxml2, с которой связан PHP. Вы даже можете заменить двоичную версию библиотеки под капотом, не перекомпилируя php. (Это хаки и ограничено, я знаю, но однажды я это сделал, потому что у debian lenny версии libxml2 была ошибка)

Для обнаружения во время выполнения этих функций в ответах PHP @ hakre это хороший фрагмент

У расширения PHP DOM есть функция Object Object Model (Core) Level 1 . Вы можете протестировать функции, которые реализованы с помощью вспомогательного метода, а затем тестирование функций и версий, здесь сводка для четырех функций:

  • Одна версия ядра найдена: '1.0' .
  • Найдено четыре версии XML : '2.0'; '1.0'; ''; NULL '2.0'; '1.0'; ''; NULL '2.0'; '1.0'; ''; NULL .
  • Найдены нулевые версии HTML .
  • Найдены версии Zero XHTML .
  • Найдены версии Zero XPath .

Этот результат в сочетании со спецификациями является искаженным, если не эзотерическим . Основная функция на уровне 1.0 требует возврата TRUE для не указанной версии (здесь: для '' и NULL ), но, как показывают результаты, это не так. Таким образом, даже DOM Core Level 1 объявлен как функция, он также нарушен.

Кроме того, функция XML не может быть уровнем 2.0, если функция Core на уровне 2.0 не поддерживается – и это имеет место здесь, Core Level 2.0 не поддерживается.

Особенности в DOM ( источник ):

Особенности в DOM

Пример вывода моего сценария примера:

 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. 

Пример скрипта:

 <?php /** * What is the DOM Core Version is Supported by PHP DOM? * @link http://stackoverflow.com/a/17340953/367456 */ $dom = new DOMDocument(); $dom->loadXML('<root/>'); $versionsArray = ['3.0', '2.0', '1.0', '', NULL]; $features = [ # Document Object Model (DOM) <http://www.w3.org/DOM/DOMTR> 'Core' => $versionsArray, # Document Object Model (DOM) <http://www.w3.org/DOM/DOMTR> 'XML' => $versionsArray, # Document Object Model (DOM) Level 2 HTML Specification <http://www.w3.org/TR/DOM-Level-2-HTML/> 'HTML' => $versionsArray, 'XHTML' => $versionsArray, # Document Object Model XPath <http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html> "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) : ''); } }