如果包含标记,请移除父节点



如果url元素包含优先级标记,我将尝试从我的网站地图中删除它们。我做错了什么?

脚本:

<?php
$xml = new DOMDocument;
$xml->load('sitemap.xml');
$priorities = $xml->getElementsByTagName('priority');
foreach($priorities as $priority){
$xml->removeChild($priority);
}
echo $xml->saveXML();

现有网站地图:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://www.example.tld/</loc></url>
<url><loc>https://www.example.tld/file</loc></url>
<url><loc>https://www.example.tld/folder/</loc><priority>0.7</priority></url>
<url><loc>https://www.example.tld/folder2/</loc><priority>0.3</priority></url>
</urlset>

想要的网站地图:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://www.example.tld/</loc></url>
<url><loc>https://www.example.tld/file</loc></url>
</urlset>

您必须使用$priorityparentNode而不是$xml来移除子级。

您可以使用for循环来减少$i的值,而不是使用foreach来循环集合

$xml = new DOMDocument;
$xml->load('sitemap.xml');
$priorities = $xml->getElementsByTagName('priority');
for ($i = $priorities->length - 1; $i >= 0; $i--) {
$priorities[$i]->parentNode->removeChild($priorities[$i]);
}
echo $xml->saveXML();

最新更新