Verzeichnisstruktur phpBB-3.3.15


Veröffentlicht
28.08.2024

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: 02.04.2025, 15:03 - 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  }