Looks like you have to use registerXPathNamespace for each node when using XPath:
<?php
$xml = simplexml_load_file($filename);
$xml->registerXPathNamespace('test', 'http://example.com');
$shopping_element = $xml->xpath('test:shopping-list');
// Breaks with out the following line:
$shopping_element->registerXPathNamespace('test', 'http://example.com');
$fruit = $shopping_element->xpath('test:fruit');
?>SimpleXMLElement::registerXPathNamespace
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
SimpleXMLElement::registerXPathNamespace
Референца за `simplexmlelement.registerxpathnamespace.php` со подобрена типографија и навигација.
SimpleXMLElement::registerXPathNamespace
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
SimpleXMLElement::registerXPathNamespace — (PHP 5 >= 5.1.0, PHP 7, PHP 8)
= NULL
Создава контекст на префикс/проширување за следниот XPath прашалник registerXPathNamespace Создава контекст на префикс/проширување за следниот XPath прашалник. Особено, ова е корисно ако давателот на дадениот XML документ ги менува префиксите на просторот на имиња.
Параметри
prefix-
ќе создаде префикс за поврзаниот простор на имиња, дозволувајќи пристап до јазли во тој простор на имиња без потреба од менување на кодот за да се дозволат новите префикси диктирани од давателот.
namespace. namespace-
Префиксот на просторот на имиња што треба да се користи во XPath прашалникот за просторот на имиња даден во
prefixПросторот на имиња што треба да се користи за XPath прашалникот. Ова мора да одговара на простор на имиња што се користи од XML документот или XPath прашалникот што користи
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.
Примери
нема да врати никакви резултати.
<?php
$xml = <<<EOD
<book xmlns:chap="http://example.org/chapter-title">
<title>My Book</title>
<chapter id="1">
<chap:title>Chapter 1</chap:title>
<para>Donec velit. Nullam eget tellus vitae tortor gravida scelerisque.
In orci lorem, cursus imperdiet, ultricies non, hendrerit et, orci.
Nulla facilisi. Nullam velit nisl, laoreet id, condimentum ut,
ultricies id, mauris.</para>
</chapter>
<chapter id="2">
<chap:title>Chapter 2</chap:title>
<para>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin
gravida. Phasellus tincidunt massa vel urna. Proin adipiscing quam
vitae odio. Sed dictum. Ut tincidunt lorem ac lorem. Duis eros
tellus, pharetra id, faucibus eu, dapibus dictum, odio.</para>
</chapter>
</book>
EOD;
$sxe = new SimpleXMLElement($xml);
$sxe->registerXPathNamespace('c', 'http://example.org/chapter-title');
$result = $sxe->xpath('//c:title');
foreach ($result as $title) {
echo $title . "\n";
}
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Chapter 1 Chapter 2
Пример #1 Поставување префикс на простор на имиња за употреба во XPath прашалник chapЗабележете како XML документот прикажан во примерот поставува простор на имиња со префикс c . Замислете дека овој документ (или друг сличен на него) можеби користел префикс
registerXPathNamespace во минатото за истиот простор на имиња. Бидејќи е променет, XPath прашалникот повеќе нема да ги враќа соодветните резултати и прашалникот ќе бара модификација. Користење
Види Исто така
- избегнува идни модификации на прашалникот дури и ако давателот го промени префиксот на просторот на имиња. SimpleXMLElement::xpath()
- (PHP 5 >= 5.1.2, PHP 7, PHP 8) - Враќа простори на имиња декларирани во документот
- SimpleXMLElement::getNamespaces() - Враќа простори на имиња користени во документот