Php XML解析器错误:文档元素后的垃圾

Php XML解析器错误:文档元素后的垃圾,php,mysql,xml,xml-parsing,Php,Mysql,Xml,Xml Parsing,我一直遇到一个xml解析错误,我认为这与空格和注释有关,但由于我对php、mysql和xml有点陌生,我不能100%确定下面的代码是否正确 我得到一个错误: XML-parsefout: troep na documentelement Locatie: xml.php Regelnummer 10, kolom 1:<project id="90"> ^ 翻译成: XML-parseerror: junk after document element Location: xml.

我一直遇到一个xml解析错误,我认为这与空格和注释有关,但由于我对php、mysql和xml有点陌生,我不能100%确定下面的代码是否正确

我得到一个错误:

XML-parsefout: troep na documentelement
Locatie: xml.php
Regelnummer 10, kolom 1:<project id="90">
^
翻译成:

XML-parseerror: junk after document element
Location: xml.php
Regelnummer 10, kolom 1:<project id="90">
^
代码:

这是浏览器生成的内容:

<parsererror>
XML-parsefout: troep na documentelement Locatie: xml.php Regelnummer 10, kolom 1:
<sourcetext><project id="90"> ^</sourcetext>
</parsererror>

XML必须只有一个根。因此,添加一个包含所有其他元素的根元素

例如:

<?xml version="1.0"?>
<projects>
 <project id="89">
  <id>89</id>
  <projectnaam>XML Feed vacatures amikappers.nl</projectnaam>
  <status>false</status>
  <klantnaam>AMI kappers</klantnaam>
  <startdatum>2013-10-14</startdatum>
  <eindddatum>2013-10-25</eindddatum>
 </project>
 <project id="90">
  <id>90</id>
  <projectnaam>Wifi startpagina AMI Kappers</projectnaam>
  <status>false</status>
  <klantnaam>AMI kappers</klantnaam>
  <startdatum>2013-10-14</startdatum>
  <eindddatum>2013-11-15</eindddatum>
 </project>
</projects>
改成MySQL改成MySQLi!现在就开始改变是很重要的,只要你能= 使用函数!您反复编写$xml->startElement&$xml->endElement,并将其放入addNode方法中。 还添加了一个“根”节点以附加每个数据库行。 使用,它将有助于安全地避开任何可能的困难角色
请向我们展示您要阅读的XML文档。我猜它不是有效的XML。生成的XML是什么样子的?我想通过从数据库中获取值来编写XML文档,并最终将其保存在服务器上,作为一个具有.XML扩展名的文件。您多次使用您的元素,因此它不能是根元素。它似乎确实缺少根元素。感谢我这样做,现在得到一个错误:XML parsefout:onjuist gevormd Locatie:XML.php Regelnummer 29,kolom 29:Project 1-------------------^好吧,我不懂你的语言。但是当您查看生成的XML的源代码时,您会发现嵌套是错误的。Awesome=如果您在问题中添加一些小样本XML,可能会有助于投票!这是唯一缺少的东西。我使用CData来确保没有任何文本字符串破坏XML,但如果没有任何示例数据,我也不能确定!嗯,我认为它是有效的让我更新我目前在startpost中的代码。我试着给它加上标记,让它对我来说清晰,但不知怎的,我只看到了结尾的标签?它显示为一个XML btw,但只带有根元素的结束标记?您是否调整了代码的其余部分以适应mysqli?否则,将其改回mysql,并将mysqli_fetch_assoc改回mysql_fetch_assoc.Nah这没什么区别,您可能想查看我在startpost中更新的代码!这确实会有所不同。非常感谢,我忘了换了。非常感谢您的帮助,先生!非常感谢你!
<?xml version="1.0"?>
<projects>
 <project id="89">
  <id>89</id>
  <projectnaam>XML Feed vacatures amikappers.nl</projectnaam>
  <status>false</status>
  <klantnaam>AMI kappers</klantnaam>
  <startdatum>2013-10-14</startdatum>
  <eindddatum>2013-10-25</eindddatum>
 </project>
 <project id="90">
  <id>90</id>
  <projectnaam>Wifi startpagina AMI Kappers</projectnaam>
  <status>false</status>
  <klantnaam>AMI kappers</klantnaam>
  <startdatum>2013-10-14</startdatum>
  <eindddatum>2013-11-15</eindddatum>
 </project>
</projects>
    /**
     *  Rewrite MySQL to MySQLi
     *  http://php.net/manual/en/migration55.deprecated.php
    **/
    $sql = "SELECT * FROM projecten ORDER BY id";
    $res = mysqli_query($sql);

    /**
     *  Adjusted startDoc to include
     *  Encoding and set Indent to tab
     *  instead of spacing.
    **/
    $xml = new XMLWriter();
    $xml->openURI("php://output");
    $Xml->setIndentString ( "&#09;" );
    $Xml->startDocument( '1.0', 'UTF-8', 'no' );
    $xml->setIndent(true);

    /**
     *  Re-usable function to
     *  write a Start/End Element 
     *  to XMLWriter.
     *
     *  Uses CDdata for longer text strings
    **/
    function addNode( $xml, $NodeName, $Value ) {
        $xml->startElement( $NodeName );
        $xml->writeCData( $Value );
        $xml->endElement();      
    }

    /**
     *  Start a Root Element
    **/
   $xml->startElement('projects');

    /**
     *  LoopThrough each Database row.
    **/
   while ($row = mysqli_fetch_assoc($res)) {

        //START PROJECT
        $xml->startElement('project');
        $xml->writeAttribute('id', $row['id']);

            addNode( $xml, "Id", $row["id"] );
            addNode( $xml, "projectnaam", $row['projectnaam'] );
            addNode( $xml, "status", $row['status'] );
            addNode( $xml, "klantnaam", $row['klantnaam'] );
            addNode( $xml, "startdatum", $row['startdatum'] );
            addNode( $xml, "eindddatum", $row['eindddatum'] );

        //End 'Project'.
        $xml->endElement();
    }

    //End Root Element.
    $xml->endElement();

    //EINDE DOCUMENT
    $xml->endDocument(); 

    header('Content-type: text/xml');
    $xml->flush();