Nešikovná práce se jmennými prostory

Příklad 4. simplexml/ns.php

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN'>
<html lang="cs">
  <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>Zpracování jmenných prostorů pomocí SimpleXML</title>
  </head>
  <body>
<?php 

// načtení dokumentu
$xml = simplexml_load_file("../data/ns.xml");

// vypíšeme titulky, ale který je který?
foreach ($xml->title as $title)
{
  echo htmlspecialchars($title) . "<br>\n";
}

echo "<hr>\n";

// vypíšeme všechny podelementy
foreach ($xml->children() as $name => $node)
{
  echo htmlspecialchars($node) . "<br>\n";
}

echo "<hr>\n";

// vypíšeme elementy s lokálním názvem title
foreach ($xml->xpath("//*[local-name() = 'title']") as $title)
{
  echo htmlspecialchars($title) . "<br>\n";
}

echo "<hr>\n";

// vypíšeme titulek, který patří do DC
echo htmlspecialchars($xml->children('http://purl.org/dc/elements/1.1/')->title);

echo "<hr>\n";

// vypíšeme titulek, který patří do DC pomocí XPath
foreach ($xml->xpath("//*[local-name() = 'title' and namespace-uri() = 'http://purl.org/dc/elements/1.1/']") as $title)
{
  echo htmlspecialchars($title) . "<br>\n";
}

echo "<hr>\n";

// vypíšeme titulek podle DC elegantněji, bude fungovat až od PHP5.1
$xml->registerXPathNamespace("dc", "http://purl.org/dc/elements/1.1/");
foreach ($xml->xpath("//dc:title") as $title)
{
  echo htmlspecialchars($title) . "<br>\n";
}

echo "<hr>\n";

// přístup k atributu, který patří do jmenného prostoru
foreach ($xml->para->phrase->attributes('http://www.w3.org/1999/xlink') 
         as $name => $value)
{
  if ($name == "href") echo "Cíl odkazu XLink: $value";
}

?>
  </body>
</html>