DOMDocument избегать начального тега xml - PullRequest
0 голосов
/ 13 февраля 2020

Вопрос:

Как избежать, чтобы DOMDocument создавал начальный xml -tag?:

<?xml version="1.0"?>

Требуемый код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <title>My site</title>
  </head>
  <body>
  </body>
</html>

Произведенный код с использованием DOMDocument:

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>My site</title>
  </head>
  <body></body>
</html>

Мой сценарий:

<?php

/**
 * Ref:
 * https://stackoverflow.com/questions/19482826/using-domdocument-to-create-elements-in-an-html-file
 * https://www.php.net/manual/en/domimplementation.createdocumenttype.php
 */

// Creates an instance of the DOMImplementation class
$imp = new DOMImplementation;

 // Doctype
 $dtd = $imp->createDocumentType(
   'html', '-//W3C//DTD XHTML 1.0 Transitional//EN', 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'
 );

// Base document
$doc = $imp->createDocument("", "", $dtd);
$doc->formatOutput = true;


/**
 * Construct tag skeleton.
 */

// [L-1]
$html=$doc->appendChild(
  $doc->createElementNS("http://www.w3.org/1999/xhtml","html")
);

$html->setAttribute("lang", "en");
$html->setAttribute("xml:lang", "en");
$doc->appendChild($html);


    // [L-2]
    $head=$html->appendChild(
      $doc->createElement('head')
    );

        // [L-3]
        $title=$head->appendChild(
          $doc->createElement(
            'title',
            "My site"
          )
        );

    // [L-2]
    $body=$html->appendChild(
      $doc->createElement('body')
    );

// Save
echo $doc->saveHTML();
$doc->save("auto_produced_xhtml.xhtml");

1 Ответ

0 голосов
/ 13 февраля 2020

Вы можете использовать saveHTMLFile(); вместо save(), чтобы ... сохранить как HTML файл. Заменить

$doc->save("auto_produced_xhtml.xhtml");

на

$doc->saveHTMLFile("auto_produced_xhtml.xhtml");

https://www.php.net/manual/en/domdocument.savehtmlfile.php

...