如何在php中从文本文件中的文本生成xml

如何在php中从文本文件中的文本生成xml,php,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&g

如何在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;
}
样本输出:

<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>

http://example.com/page1.html
http://example.com/page2.html
http://example.com/page3.html
http://example.com/page4.html
我需要将这些用于sitemap.xml

您可以在php中写入文件

xml错误“文档末尾的额外内容”非常简单。根据定义,一个有效的XMLDOM必须有一个(而且只有一个)单一根注释,它包含整个数据集。你没有这个。您的输出是:

<?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>

http://example.com/page1.html
http://example.com/page2.html
http://example.com/page3.html
http://example.com/page4.html
而有效的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';

http://example.com/page1.html
http://example.com/page2.html
http://example.com/page3.html
http://example.com/page4.html
因此,在您的情况下,简单的解决方法是:

<?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';
header('Content-type:application/xml');
回声'
';
$lines=文件(
'file.txt',
//不要对XML值进行换行,并跳过空值,以避免空标记
文件\忽略\新行\文件\跳过\空行
);
foreach($line作为$line)
{
回声'http://example.com/“,$line,”.html“”;
}

echo'
file()
仅用于读取,而不提供用于写入的文件处理程序。连接输出,然后将其写入文件。您需要考虑以下几点:您的代码没有生成有效的XML文件:例如,您忘记添加
标记。运行此脚本确实会输出XML字符串,但不会将其写入文件,为此,您需要
fwrite
file\u put\u contents
。尽管标记非常简单,但使用正确的工具(
simpleXML
DOMDocument
)构建DOM被认为是更安全的,而不是将其串在一起,这是错误的-prone@EliasVan Ootegem你能告诉我怎么做吗?因为我真的是个初学者。希望你能理解我的处境。@pmescorido:我理解你的处境,并对此表示同情。但是仅仅用勺子喂你答案并不能帮助你真正理解事情。我强烈建议您查看我提到的类的文档,并首先自己尝试一下。如果你在路上遇到困难,更新这个问题,我会尽我所能帮助你。希望你明白我的意思from@EliasVan Ootegem好的,让我试试,如果我能做到的话,谢谢你没有制作一个新的xml,我的意思是当我访问php文件时它会输出一个xml使用echo它会工作的,我想因为打印只是为了debugging@AdityaShankerTagirisa:
打印
仅用于调试?你在抽什么<代码>打印
与回声一样有效。说它是为了调试,就像说电脑的扬声器只是为了发出警告噪音…@Aditya Shanker Tagirisa tnx我用了echo,它工作了,但给我带来了新问题,我更新了这个问题。@Aditya Shanker Tagirisa:,里面没有关于调试的
打印的内容
print
是一种语言结构,就像
return
echo
一样。无法禁用语言构造。结束
print
仅将其参数传递给输出流。没什么特别的。禁用
print
将需要您构建自己的PHP分支。。。php不可能按原样运行。不可能,不会发生……哦,真的是tnx,“文档末尾的额外内容”解决了,但给我带来了新的错误“编码错误”@pmescorido:这是因为PHP使用UTF-8编码,但XML的默认编码是
ISO-8859-1
。只需在xml标记中添加一个
encoding=“utf-8”
属性(请参见更新的答案),您就可以自由回家了,除非是另一种方式。。。我总是要查那个。哦,好吧,只是玩一下编码属性。我已经尝试了你的代码,但给我带来了空白页。我想你错过了一些我从未见过的东西。请再次检查。@pmescorido:检查页面的来源,XML标记在某些浏览器中不显示…@pmescorido:将错误报告设置为-1(或
E|u STRICT | E|u ALL
),并将
显示错误设置为1,您应该能够看到错误是什么。另外:在调用
header()
之前,确保没有任何输出。这包括脚本顶部的任何空白: