Verzeichnisstruktur phpBB-3.3.16


Veröffentlicht
27.04.2026

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

Document.php

Zuletzt modifiziert: 01.05.2026, 11:26 - Dateigröße: 6.17 KiB


 001  <?php declare(strict_types=1);
 002   
 003  /**
 004  * @package   s9e\SweetDOM
 005  * @copyright Copyright (c) 2019-2021 The s9e authors
 006  * @license   http://www.opensource.org/licenses/mit-license.php The MIT License
 007  */
 008  namespace s9e\SweetDOM;
 009   
 010  use DOMDocument;
 011  use DOMNode;
 012  use DOMNodeList;
 013  use DOMXPath;
 014   
 015  class Document extends DOMDocument
 016  {
 017      /**
 018      * @link https://www.php.net/manual/domdocument.construct.php
 019      *
 020      * @param string $version  Version number of the document
 021      * @param string $encoding Encoding of the document
 022      */
 023      public function __construct(string $version = '1.0', string $encoding = 'utf-8')
 024      {
 025          parent::__construct($version, $encoding);
 026   
 027          $this->registerNodeClass('DOMElement', Element::class);
 028      }
 029   
 030      /**
 031      * Create and return an xsl:apply-templates element
 032      *
 033      * @param  string  $select XPath expression for the "select" attribute
 034      * @return Element
 035      */
 036      public function createXslApplyTemplates(string $select = null): Element
 037      {
 038          $element = $this->createElementXSL('apply-templates');
 039          if (isset($select))
 040          {
 041              $element->setAttribute('select', $select);
 042          }
 043   
 044          return $element;
 045      }
 046   
 047      /**
 048      * Create and return an xsl:attribute element
 049      *
 050      * @param  string  $name Attribute's name
 051      * @param  string  $text Text content for the element
 052      * @return Element
 053      */
 054      public function createXslAttribute(string $name, string $text = ''): Element
 055      {
 056          $element = $this->createElementXSL('attribute', $text);
 057          $element->setAttribute('name', $name);
 058   
 059          return $element;
 060      }
 061   
 062      /**
 063      * Create and return an xsl:choose element
 064      *
 065      * @return Element
 066      */
 067      public function createXslChoose(): Element
 068      {
 069          return $this->createElementXSL('choose');
 070      }
 071   
 072      /**
 073      * Create and return an xsl:comment element
 074      *
 075      * @param  string  $text Text content for the comment
 076      * @return Element
 077      */
 078      public function createXslComment(string $text = ''): Element
 079      {
 080          return $this->createElementXSL('comment', $text);
 081      }
 082   
 083      /**
 084      * Create and return an xsl:copy-of element
 085      *
 086      * @param  string  $select XPath expression for the "select" attribute
 087      * @return Element
 088      */
 089      public function createXslCopyOf(string $select): Element
 090      {
 091          $element = $this->createElementXSL('copy-of');
 092          $element->setAttribute('select', $select);
 093   
 094          return $element;
 095      }
 096   
 097      /**
 098      * Create and return an xsl:if element
 099      *
 100      * @param  string  $test XPath expression for the "test" attribute
 101      * @param  string  $text Text content for the element
 102      * @return Element
 103      */
 104      public function createXslIf(string $test, string $text = ''): Element
 105      {
 106          $element = $this->createElementXSL('if', $text);
 107          $element->setAttribute('test', $test);
 108   
 109          return $element;
 110      }
 111   
 112      /**
 113      * Create and return an xsl:otherwise element
 114      *
 115      * @param  string  $text Text content for the element
 116      * @return Element
 117      */
 118      public function createXslOtherwise(string $text = ''): Element
 119      {
 120          return $this->createElementXSL('otherwise', $text);
 121      }
 122   
 123      /**
 124      * Create and return an xsl:text element
 125      *
 126      * @param  string  $text Text content for the element
 127      * @return Element
 128      */
 129      public function createXslText(string $text = ''): Element
 130      {
 131          return $this->createElementXSL('text', $text);
 132      }
 133   
 134      /**
 135      * Create and return an xsl:value-of element
 136      *
 137      * @param  string  $select XPath expression for the "select" attribute
 138      * @return Element
 139      */
 140      public function createXslValueOf(string $select): Element
 141      {
 142          $element = $this->createElementXSL('value-of');
 143          $element->setAttribute('select', $select);
 144   
 145          return $element;
 146      }
 147   
 148      /**
 149      * Create and return an xsl:variable element
 150      *
 151      * @param  string  $name   Name of the variable
 152      * @param  string  $select XPath expression
 153      * @return Element
 154      */
 155      public function createXslVariable(string $name, string $select = null): Element
 156      {
 157          $element = $this->createElementXSL('variable');
 158          $element->setAttribute('name', $name);
 159          if (isset($select))
 160          {
 161              $element->setAttribute('select', $select);
 162          }
 163   
 164          return $element;
 165      }
 166   
 167      /**
 168      * Create and return an xsl:when element
 169      *
 170      * @param  string  $test XPath expression for the "test" attribute
 171      * @param  string  $text Text content for the element
 172      * @return Element
 173      */
 174      public function createXslWhen(string $test, string $text = ''): Element
 175      {
 176          $element = $this->createElementXSL('when', $text);
 177          $element->setAttribute('test', $test);
 178   
 179          return $element;
 180      }
 181   
 182      /**
 183      * Evaluate and return the result of a given XPath expression
 184      *
 185      * @param  string  $expr           XPath expression
 186      * @param  DOMNode $node           Context node
 187      * @param  bool    $registerNodeNS Whether to register the node's namespace
 188      * @return mixed
 189      */
 190      public function evaluate(string $expr, DOMNode $node = null, bool $registerNodeNS = true)
 191      {
 192          return $this->xpath('evaluate', func_get_args());
 193      }
 194   
 195      /**
 196      * Evaluate and return the first element of a given XPath query
 197      *
 198      * @param  string      $expr           XPath expression
 199      * @param  DOMNode     $node           Context node
 200      * @param  bool        $registerNodeNS Whether to register the node's namespace
 201      * @return DOMNode|null
 202      */
 203      public function firstOf(string $expr, DOMNode $node = null, bool $registerNodeNS = true): ?DOMNode
 204      {
 205          return $this->xpath('query', func_get_args())->item(0);
 206      }
 207   
 208      /**
 209      * Evaluate and return the result of a given XPath query
 210      *
 211      * @param  string      $expr           XPath expression
 212      * @param  DOMNode     $node           Context node
 213      * @param  bool        $registerNodeNS Whether to register the node's namespace
 214      * @return DOMNodeList
 215      */
 216      public function query(string $expr, DOMNode $node = null, bool $registerNodeNS = true): DOMNodeList
 217      {
 218          return $this->xpath('query', func_get_args());
 219      }
 220   
 221      /**
 222      * Create and return an XSL element
 223      *
 224      * @param  string  $name Element's local name
 225      * @param  string  $text Text content for the element
 226      * @return Element
 227      */
 228      protected function createElementXSL(string $localName, string $text = ''): Element
 229      {
 230          return $this->createElementNS(
 231              'http://www.w3.org/1999/XSL/Transform',
 232              'xsl:' . $localName,
 233              htmlspecialchars($text, ENT_XML1)
 234          );
 235      }
 236   
 237      /**
 238      * Execute a DOMXPath method and return the result
 239      *
 240      * @param  string $methodName
 241      * @param  array  $args
 242      * @return mixed
 243      */
 244      protected function xpath(string $methodName, array $args)
 245      {
 246          $xpath = new DOMXPath($this);
 247          $xpath->registerNamespace('xsl', 'http://www.w3.org/1999/XSL/Transform');
 248   
 249          return call_user_func_array([$xpath, $methodName], $args);
 250      }
 251  }