【问题标题】:XML new line through PHP not working通过 PHP 的 XML 新行不起作用
【发布时间】:2012-11-12 11:19:49
【问题描述】:

我正在尝试让 PHP 保存 XML 文件,同时使用新行对其进行组织。我正在尝试使用$dom->formatOutput = true;,但我不断收到此错误:

Warning: DOMDocument::loadXML() [domdocument.loadxml]: Empty string supplied as input in /public_html/rejectlist/processForm.php on line 48

这是我的 PHP 文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Adding Songs...</title>
<style type="text/css">
em {
    text-align:center;
}
</style>
</head>
<body>
<p>
<?
$songs = Array();
function start_element($parser, $name, $attrs){
    global $songs;
    if($name == "song"){
        array_push($songs, $attrs);
    }
}
function end_element ($parser, $name){}
$playlist_string = file_get_contents("playlist.xml");
$parser = xml_parser_create();
xml_set_element_handler($parser, "start_element", "end_element");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parse($parser, $playlist_string) or die("Error parsing XML document.");
print "<br />";
if($_POST['action'] == "ins"){
    array_push($songs, Array(
                "title" => $_POST['name'],
                "artist" => $_POST['artist'],
                "path" => $_POST['path']));
    $songs_final = $songs;
}else if($_POST['action'] == "del"){
    $songs_final = Array();
    foreach($songs as $song){
        if($song['title'] != $_POST['name']){
            array_push($songs_final, $song);
        }
    }
}
$write_string = "<songs>";
foreach($songs_final as $song){
    $write_string .= "<song title=\"$song[title]\" artist=\"$song[artist]\" path=\"$song[path]\" />";
}
$write_string .= "</songs>";
$dom = new DomDocument();
$dom->loadXML($songs);
$dom->formatOutput = true;
$formatedXML = $dom->saveXML();
$fp = fopen("playlist.xml", "w+");
fwrite($fp, $write_string) or die("Error writing to file");
fclose($fp);
print "<em>Song inserted or deleted successfully :)</em><br />";
print "<a href=\"index.php\" title=\"return\">Return</a>";
?>
</p>
</body>
</html>

感谢您的帮助

【问题讨论】:

  • 你有什么理由使用像file_get_contents、fopen/fwrite这样的文件系统方法吗? DOM 有自己的方法,例如DOMDocument-&gt;load()(从文件加载文档)和DOMDocument-&gt;save()(将文档保存到文件中)?
  • 老实说,我不知道自己在做什么。我正在处理this file here,并从this answer 获取了formatOuput 代码。 =\
  • 我们有 2012 年,这个文件是 2004 年的,是时候更新了:php.net/manual/de/class.domdocument.php

标签: php html xml dom line


【解决方案1】:

您的代码读起来不愉快,所以我不确定它还有什么问题,但您的错误原因是这一行:

$dom->loadXML($songs);

$songs 是一个数组,而不是一个字符串。 (阅读并注意错误信息。)

【讨论】:

  • 我不明白。例如,我会为 loadXML(); 放什么?除了$songs?我试过"playlist.xml",但没有用。我得到一个不同的错误Start tag expected, '&lt;' not found in Entity, line
  • 读取the documentation--$source应该是一个包含XML的字符串。还有一个类似的方法load() 从文件中加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
  • 2012-09-06
相关资源
最近更新 更多