دریافت namespaceها (getNamespaces)
تابع getNamespaces() فهرست «فضای نام (Namespace)» های XML را می دهد. فضای نام یعنی نام خانوادگی تگ ها که تداخل اسامی را حل می کند. این کمک می کند تگ های هم نام قاطی نشوند؛ مثل اسم کوچک های تکراری در مدرسه.
کاربرد getNamespaces در SimpleXML
با این تابع، URIهای فضای نام را می گیری. اگر گزینه true بدهی، همه فضای نام های به کاررفته برمی گردد. اگر false باشد، فقط فضای نام های ریشه می آیند.
نگارش (Syntax)
SimpleXMLElement::getNamespaces(recursive)
مثال: دریافت همه namespaceها
در این مثال، همه فضای نام ها را به صورت آرایه می بینیم.
<?php
$xml = <<<XML
<?xml version="1.0" standalone="yes"?>
<cars xmlns:c="http://w3schools.com/ns" xmlns:a="http://w3schools.com/country">
<c:car id="1">Volvo</c:car>
<c:car id="2">BMW</c:car>
<c:car id="3">Saab</c:car>
</cars>
XML;
$sxe = new SimpleXMLElement($xml);
$ns = $sxe->getNamespaces(true);
var_dump($ns);
?>
فقط namespaceهای ریشه
گاهی فقط فضای نام های ریشه مهم است. این طوری بگیر:
<?php
$xml = <<<XML
<?xml version="1.0" standalone="yes"?>
<cars xmlns:c="http://w3schools.com/ns" xmlns:a="http://w3schools.com/country">
<c:car id="1">Volvo</c:car>
<c:car id="2">BMW</c:car>
<c:car id="3">Saab</c:car>
</cars>
XML;
$sxe = new SimpleXMLElement($xml);
$rootOnly = $sxe->getNamespaces(false);
var_dump($rootOnly);
?>
پیوندهای مرتبط
برای دیدن فضای نام های «اعلام شده» در سند، بخش namespace در XML را ببین. برای پیمایش نودها هم children و برای ویژگی ها attributes را بررسی کن.
نکته: نام تگ با پیشوند می آید؛ URI فضای نام پشت صحنه یکتاییش را تضمین می کند.
گام های سریع
- XML را در SimpleXMLElement بساز.
- برای همه فضای نام ها true بده.
- اگر فقط ریشه مهم است، false بده.
- نتیجه را روی کلیدها و URIها پردازش کن.
جمع بندی سریع
- getNamespaces آرایه پیشوند⇄URI می دهد.
- true یعنی همه سند؛ false یعنی فقط ریشه.
- برای اعلام ها از getDocNamespaces کمک بگیر.
- با children و attributes پیمایش دقیق تر کن.