For a google sitemap I want to create XML nodes with namespace. How can I prevent simplexml from inserting the namespace on each node.
Structure that I need:
<xhtml:link
rel="alternate"
hreflang="de"
href="http://www.example.com/deutsch/"
/>
Structure from my code:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>www.url.ch</loc>
<xhtml:link xmlns:xhtml="xhtml" rel="alternate" hreflang="de-CH" href="www.url.ch/de">www.url.ch/de</xhtml:link>
<xhtml:link xmlns:xhtml="xhtml" rel="alternate" hreflang="fr-CH" href="www.url.ch/fr">www.url.ch/fr</xhtml:link>
</url>
</urlset>
My Code:
$rootNode = new SimpleXMLElement(
'<?xml version="1.0" encoding="utf-8"?>' .
' <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"></urlset>'
);
$urlNode = $rootNode->addChild('url');
$urlNode->addChild('loc', 'www.url.ch');
foreach (['de', 'fr', 'it', 'en'] as $locale) {
if (in_array($locale, ['it', 'en'])) {
continue;
}
$localeNode = $urlNode->addChild(
'xhtml:link',
'www.url.ch' . '/' . $locale,
'xhtml'
);
$localeNode->addAttribute('rel', 'alternate');
$localeNode->addAttribute('hreflang', $locale . '-CH');
$localeNode->addAttribute('href', 'www.url.ch' . '/' . $locale);
}
$rootNode->saveXML($filePath);