如何从php中的文本文件中的文本中输出xml

时间:2014-08-28 10:30:47

标签: php

如何从php中的文本文件中的文本中输出xml?
我有一个代码,但它给我带来错误“文档末尾的额外内容”。

以下是我的代码:

<?php
header('Content-Type: application/xml');
$lines = file('file.txt');
echo '<?xml version="1.0" encoding="UTF-8"?>';
foreach($lines as $line){
   $output = '<url><loc>http://example.com/'.$line.'.html</loc></url>';
   echo $output;
}

这是示例文本文件:

page1
page2
page3
page4

示例输出:

<url>
   <loc>http://example.com/page1.html</loc>
</url>
<url>
   <loc>http://example.com/page2.html</loc>
</url>
<url>
   <loc>http://example.com/page3.html</loc>
</url>
<url>
   <loc>http://example.com/page4.html</loc>
</url>

我需要将它们用于sitemap.xml

2 个答案:

答案 0 :(得分:1)

您可以在php中使用file_put_contents写入文件

答案 1 :(得分:1)

XML错误&#34;文档末尾的额外内容&#34; 非常简单。根据定义,有效的XML DOM必须只有一个单根根,它包含整个数据集。你没有这个。你的输出是:

<?xml version="1.0"?>
<url>
   <loc>http://example.com/page1.html</loc>
</url>
<url>
   <loc>http://example.com/page2.html</loc>
</url>
<url>
   <loc>http://example.com/page3.html</loc>
</url>
<url>
   <loc>http://example.com/page4.html</loc>
</url>

有效的XML将是:

<?xml version="1.0" encoding="UTF-8"?>
    <sitemap>
        <url>
            <loc>http://example.com/page1.html</loc>
        </url>
        <url>
           <loc>http://example.com/page2.html</loc>
        </url>
        <url>
           <loc>http://example.com/page3.html</loc>
        </url>
        <url>
           <loc>http://example.com/page4.html</loc>
        </url>
    </sitemap>

因此,您的案例中的简单修复将是:

header('Content-type: application/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>
<sitemap>';
$lines = file(
    'file.txt',
    //do not line-breaks to XML values, and skip empty values, to avoid empty tags
    FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES
);
foreach ($lines as $line)
{
    echo '<url><loc>http://example.com/', $line, '.html'</loc></url>';
}
echo '</sitemap';

但实际上,我建议您考虑如何最好地构建DOM,以及如何使用DOM解析器可靠地构建标记。之后,我强烈建议您将文件写入磁盘,而不是每次需要时都将其生成。