XML 解析错误:文档元素之后的垃圾 [英] XML parserror: junk after document element

查看:56
本文介绍了XML 解析错误:文档元素之后的垃圾的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不断收到 xml 解析错误,我认为这与空格和注释有关,但由于我对 php、mysql 和 xml 有点陌生,因此我不能 100% 确定以下代码是否正确.

i keep getting a xml parse error, and i think its gotta do with spaces and comments, but since i'm kinda new to php, mysql and xml i'm not 100% sure if the following code is correct.

我收到错误:

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

代码:

<?php
        $sql = "SELECT * FROM projecten ORDER BY id";
        $res = mysql_query($sql);

        $version = '1.0';
        $encoding = 'UTF-8';

        $xml = new XMLWriter();
        $xml->openURI("php://output");
        $xml->startDocument();
        $xml->setIndent(true);

        //WHILE LOOP OM ALLE GEGEVENS UIT DE QUERY TE HALEN
        while ($row = mysql_fetch_assoc($res)) {

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

                //ID
                $xml->startElement("id");
                $xml->writeRaw($row['id']);
                $xml->endElement();

                //PROJECTNAAM
                $xml->startElement("projectnaam");
                $xml->writeRaw($row['projectnaam']);
                $xml->endElement();

                //PROJECTSTATUS
                $xml->startElement("status");
                $xml->writeRaw($row['status']);
                $xml->endElement();

                //KLANTNAAM
                $xml->startElement("klantnaam");
                $xml->writeRaw($row['klantnaam']);
                $xml->endElement();

                //STARTDATUM
                $xml->startElement("startdatum");
                $xml->writeRaw($row['startdatum']);
                $xml->endElement();

                //EINDDATUM
                $xml->startElement("eindddatum");
                $xml->writeRaw($row['einddatum']);
                $xml->endElement();

            //EINDE PROJECT
            $xml->endElement();
        }

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

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

这是浏览器生成的:

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

推荐答案

    /**
     *  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();

  • 改为MySQLMySQLi!重要的是现在就开始改变吧!=)
  • 使用函数!你写 $xml->startElement &$xml->endElement 重复,将其放入 addNode() 方法中.
  • 添加了一个Root"节点来附加每个数据库行.
  • 使用CData(<![CDATA[包含在 CData 标签中的文本]]>),这将有助于安全地转义任何困难的可能字符
    • Changed to MySQL to MySQLi! It's important to start changing now while you can! =)
    • Use Functions! You write $xml->startElement & $xml->endElement repeatedly, placed it into an addNode() method.
    • Added a 'Root' node to append each database row too.
    • Use CData (<![CDATA[text for inclusion within CData tags]]>), it'll help to safetly escape any difficult possible characters
    • 这篇关于XML 解析错误:文档元素之后的垃圾的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆