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. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
Document.php
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 }