DOMXPath::registerPhpFunctionNS

(PHP >= 8.4.0)

DOMXPath::registerPhpFunctionNS β€” РСгистрируСт PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ XPath-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с пространством ΠΈΠΌΡ‘Π½

ОписаниС

public function DOMXPath::registerPhpFunctionNS(string $namespaceURI, string $name, callable $callable): void

ΠœΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΊ с XPath-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с пространством ΠΈΠΌΡ‘Π½ Π²Π½ΡƒΡ‚Ρ€ΠΈ XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

namespaceURI
URI-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ пространства ΠΈΠΌΡ‘Π½.
name
Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ пространства ΠΈΠΌΡ‘Π½.
callable
PHP-функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ трСбуСтся Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ XPath-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ XPath-выраТСния. Бписок ΡƒΠ·Π»ΠΎΠ² пСрСдаётся Π² callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Π²ΠΈΠ΄Π΅ массива, элСмСнты ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ DOM-ΡƒΠ·Π»Π°ΠΌ.

Ошибки

  • ΠœΠ΅Ρ‚ΠΎΠ΄ выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ ValueError, Ссли Π½Π°Π·Π²Π°Π½ΠΈΠ΅ callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ нСдопустимо.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ ValueError, Ссли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ options содСрТит нСдопустимыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ ValueError, Ссли Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ overrideEncoding ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ TypeError, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚ΠΈΠΏΡƒ callable.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния

Ѐункция Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ значСния послС выполнСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ рСгистрации XPath-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² пространствС ΠΈΠΌΡ‘Π½ ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· XPath-выраТСния

<?php

$xml
= <<<EOB
<books>
<book>
<title>PHP Basics</title>
<author>Jim Smith</author>
<author>Jane Smith</author>
</book>
<book>
<title>PHP Secrets</title>
<author>Jenny Smythe</author>
</book>
<book>
<title>XML basics</title>
<author>Joe Black</author>
</book>
</books>
EOB;

$doc = new DOMDocument();
$doc->loadXML($xml);

$xpath = new DOMXPath($doc);

// ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ рСгистрация пространства ΠΈΠΌΡ‘Π½ с прСфиксом 'my'
$xpath->registerNamespace("my", "urn:my.ns");

// РСгистрация PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
$xpath->registerPHPFunctionNS(
'urn:my.ns',
'substring',
fn (array
$arg1, int $start, int $length) => substr($arg1[0]->textContent, $start, $length)
);

// Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ substr Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ
$nodes = $xpath->query('//book[my:substring(title, 0, 3) = "PHP"]');

echo
"Ѐункция нашла {$nodes->length} ΠΊΠ½ΠΈΠ³ΠΈ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… начинаСтся с 'PHP':\n";
foreach (
$nodes as $node) {
$title = $node->getElementsByTagName("title")->item(0)->nodeValue;
$author = $node->getElementsByTagName("author")->item(0)->nodeValue;
echo
"$title by $author\n";
}

?>

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆ Π½Π°:

Ѐункция нашла 2 ΠΊΠ½ΠΈΠ³ΠΈ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… начинаСтся с 'PHP':
PHP Basics by Jim Smith
PHP Secrets by Jenny Smythe

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • DOMXPath::registerNamespace() - РСгистрируСт пространство ΠΈΠΌΡ‘Π½ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ DOMXPath
  • DOMXPath::query() - ВычисляСт XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
  • DOMXPath::evaluate() - ВычисляСт XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ
  • XSLTProcessor::registerPHPFunctions() - Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ XSLT-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
  • XSLTProcessor::registerPHPFunctionNS() - РСгистрируСт PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΊ XSLT-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с пространством ΠΈΠΌΡ‘Π½
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ добавляли примСчания для страницы