Forum und email

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

SimpleXMLElement
bool registerXPathNamespace ( string $prefix , string $ns )

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.