如果包含标签,则删除父节点
Remove parent nodes if contains tag
我正在尝试从我的站点地图中删除 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>
您必须使用 $priority
的 parentNode
而不是 $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();
我正在尝试从我的站点地图中删除 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>
您必须使用 $priority
的 parentNode
而不是 $xml
来删除子项。
您可以使用 for 循环递减 $i
$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();