SimpleXMLElement->registerXPathNamespace()
(PHP 5 >= 5.2.0)
SimpleXMLElement->registerXPathNamespace() — Egy prefix/ns szövegkörnyezetet hoz létre a következő XPath keresés számára
Leírás
Egy prefix/ns szövegkörnyezetet hoz létre a következő XPath keresés számára. Ez különösen akkor hasznos, ha az adott XML dokumentum létrehozója módosítja a névtér előtagokat (prefix). A registerXPathNamespace létre fog hozni egy előtagot a társított névtérnek, engedélyezve a csomókhoz való hozzáférést a kód megváltoztatása nélkül, így a létrehozó által megváltoztatott névterekkel rendelkező fájl is könnyen elemezhető lesz.
Paraméterek
- prefix
-
Az XPath lekérdezésben használni kívánt névtér élőtag az ns paraméter számára.
- ns
-
Az XPath lekérdezésben használni kívánt névtér. Ennek egyeznie kell azzal névtérrel, ami az XML dokumentumban van, máskülönben az XPath lekérdezés a prefix paramétert használva nem ad eredményt.
Visszatérési értékek
Siker esetén TRUE értékkel tér vissza, ellenkező esetben FALSE értéket ad.
Példák
Example#1 Névtér előtag megváltoztatása és használata XPath lekérdezésben
<?php
$xml = <<<EOD
<book xmlns:chap="https://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', 'https://example.org/chapter-title');
$result = $sxe->xpath('//c:title');
foreach ($result as $title) {
echo $title . "\n";
}
?>
A fenti XML dokumentumnak a névtér előtagja a chap. Elképzelhető, hogy ez a dokumentum (vagy másik hasonló) használhat c előtagot ugyanarra a névtérre. Amiután ez megváltozott, az XPath lekérdezés nem fog többet valódi eredményeket visszaadni, ezért a lekérdezést módosítani kell. Inkább használd a registerXPathNamespace függvényt, és kerüld a jövőbeli módosítását a lekérdezésnek, még akkor is, ha az XML dokumentum tulajdonosa megváltoztatja a névtér előtagját.