2011-09-02 21 views
2

我目前正在为一个网站的站点地图工作,我正在使用SimpleXML导入并对原始XML文件进行一些检查。在此之后,我使用simplexml_load_file("small.xml");将其转换为DOMDocument,以便更精确地添加和操作XML元素。以下是我工作的测试XML站点地图:PHP DOMDocument没有正确格式化输出

<?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:52:32-Orouke.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:53:23-castle technology.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:53:38-banana split.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:53:42-Waveney.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:55:12-pure orange.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:57:54-tau press.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:59:21-E.f.m.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:59:31-apple.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:59:45-townhouse communications.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
</urlset> 

现在。这里是我使用修改测试代码:

<?php 

$root = simplexml_load_file("small.xml"); 

$domRoot = dom_import_simplexml($root); 

$dom = $domRoot->ownerDocument; 

$urlElement = $dom->createElement("url"); 

    $locElement = $dom->createElement("loc"); 

     $locElement->appendChild($dom->createTextNode("www.google.co.uk")); 

    $urlElement->appendChild($locElement); 

    $lastmodElement = $dom->createElement("lastmod"); 

     $lastmodElement->appendChild($dom->createTextNode("2011-08-02")); 

    $urlElement->appendChild($lastmodElement); 

$domRoot->appendChild($urlElement); 

$dom->formatOutput = true; 
echo $dom->saveXML(); 

?> 

的主要问题是,无论在哪里,我把$dom->formatOutput = true;现有的XML这是从SimpleXML的进口格式正确,但任何新的格式化“所有的一线”的风格,如下:

<?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:52:32-Orouke.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:53:23-castle technology.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:53:38-banana split.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:53:42-Waveney.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:55:12-pure orange.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:57:54-tau press.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:59:21-E.f.m.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:59:31-apple.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
    <url> 
    <loc>http://www.companycheck.co.uk/searches/2011/08/22/23:59:45-townhouse communications.html</loc> 
    <lastmod>2011-08-23</lastmod> 
    </url> 
<url><loc>www.google.co.uk</loc><lastmod>2011-08-02</lastmod></url></urlset> 

如果任何人有一个想法,为什么这种情况正在发生,以及如何解决它,我将非常感激。

+0

出于好奇后再次加载它,并在空格上你的网站地图造成的问题? – ajreal

+0

我不确定他们是否确实在造成问题,但我只是为了以防万一解决问题。我们目前有特定条款的谷歌搜索排名第一,我不想破坏这一点。 (我意识到它仍然是有效的XML,我只是宁愿它在任何分析问题的情况下正确布置) –

+0

Sitemap XML是为机器而设计的,我不认为白色空间对Google很重要。您最好问问题到webmaster.stackexchange.com – ajreal

回答

0

有一种解决方法。您可以通过保存您的新的XML字符串率先发力重新格式化,然后设置formatOutput属性,例如:

$strXml = $dom->saveXML(); 
$dom->formatOutput = true; 
$dom->loadXML($strXml); 
echo $dom->saveXML();