如何在关闭标记之前将字符串添加到sitemap.xml,在php中

时间:2017-11-02 11:15:03

标签: php xml sitemap

经过几个小时的寻找解决方案,我找不到任何有效或适合我的问题。

基本上,我有动态网站,它会生成新页面,我想在其中添加将新页面添加到sitemap.xml的功能

当我使用:

file_put_contents("$sitemap_file", $string_to_add, FILE_APPEND);

它会在/ urlset标记之后的sitemap.xml末尾添加$string_to_add

有没有办法在/ urlset标记之前添加此字符串?

我的代码:

$date_mod = date('Y-m-d');
$string = "
<url>
    <loc>https://www.mywebsite.com$internal_link</loc>
    <lastmod>$date_mod</lastmod>
    <changefreq>monthly</changefreq>
</url>";

file_put_contents("$root/sitemap.xml", $string, FILE_APPEND);

2 个答案:

答案 0 :(得分:1)

您可以使用SimpleXML尝试以下内容:

$date_mod = date('Y-m-d');
$string = "
<url>
    <loc>https://www.mywebsite.com$internal_link</loc>
    <lastmod>$date_mod</lastmod>
    <changefreq>monthly</changefreq>
</url>";


$xml = simplexml_load_file("$root/sitemap.xml");
$xml->addChild($string);

file_put_contents("$root/sitemap.xml", $xml->asXML());

这会将<url>置于<urlset>标记内,希望如此。

答案 1 :(得分:0)

只需使用SimpleXML:

// You can also do
// $xmlStr= file_get_contents('sitemap.xml');
$xmlStr=<<<XML
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://domain.fake/link1.html</loc>
<priority>1.0</priority>
</url>
<url>
<loc>http://domain.fake/link2.html</loc>
<priority>0.99</priority>
</url>
</urlset>
XML;

// Create the SimpleXML object from the string
$xml = simplexml_load_string($xmlStr);
// add an <url> child to the <urlset> node
$url = $xml->addChild("url");
// add the <loc> and <priority> children to the <url> node 
$url->addChild("loc", "http://domain.fake/link2.html");
$url->addChild("priority", 0.98);

// get the updated XML string
$newXMLStr = $xml->asXML();
//write it to the sitemap.xml file
file_put_contents('sitemap.xml',$newXMLStr);