【问题标题】:URL: XML parsing error : not well formedURL:XML 解析错误:格式不正确
【发布时间】:2016-03-22 18:14:48
【问题描述】:

我有这个错误:

XML parsing error : not well formed
Location : http://127.0.0.1/localwebsite/map-control-event-type-criteria.php?=&eP=chose&tP=pub_beer&aP[0]=eating&aT=washington
Number of line 1, Column 2 :

源代码似乎是正确的:我明白了:

    <?xml version="1.0"?>
    <markers><marker name="the name" address="the adress" lat="46.187424" lng="8.717437" id="1" town="washington"/></markers>

页面的php代码如下:

    <?php
    require 'inc/bootstrap.php';
    require_once 'inc/db.php';

    $db = app::getdatabase();

    $evtpar=$_GET['eP'];
    $typepar=$_GET['tP'];
    $critpar=$_GET['aP']; 
    $townURL=$_GET['aT'];

    // some php code to test the validity of URL parameters

    $dom = new DOMDocument("1.0");
    $node = $dom->createElement("markers");
    $parnode = $dom->appendChild($node); 


    $result=$db->query("SELECT name.....)->fetchall(); 

    header("Content-type: text/xml");
    $i=0;
    foreach ($result as $row)
    {
       $node = $dom->createElement("marker");
       $newnode = $parnode->appendChild($node);
       $newnode->setAttribute("name", $row->name);
       $newnode->setAttribute("address", $row->address);
       $newnode->setAttribute("lat", $row->lat);
       $newnode->setAttribute("lng", $row->lng);
       $newnode->setAttribute("id", $row->inf_id);
       $newnode->setAttribute("town", $row->town);

       $i++;
    }   

     echo $dom->saveXML();

我怎么知道问题出在哪里?

第 1 行数是否表示问题出在 URL 或以下代码?

编辑:上述代码之前的文件:

在到达 URL 之前,我必须查看之前的代码:

    File1 php:
    $mapDisplay='EventCritType';

    File2 included in File1:

    <?php if($mapDisplay=='EventCritType'): 
    echo     $Map->mapeventcrittypeview($town,$eventparam,$typeparam,$activityparams,$lat,$lng,13); 
    endif; ?>

    file3 = Map Class:

    public function mapeventcrittypeview($town,$eventparam,$typeparam,$activityparams,$lat,$lng,$zoom)
    {

        $evtparam=http_build_query(array('eP'=>$eventparam));
        $tpparam=http_build_query(array('tP'=>$typeparam));
        $actparam=http_build_query(array('aP'=>$activityparams));
        $city=http_build_query(array('aT'=>$town));

        $url="/localwebsite/map-control-event-type-criteria.php?=&$evtparam&$tpparam&$actparam&$city";

        include('inc/map-script.php');

    }

    File4= map-script.php

    script type="text/javascript">

    var infoWindow = new google.maps.InfoWindow;

    function load() {
      var map = new google.maps.Map(
        document.getElementById("map"), {
          center: new google.maps.LatLng(<?= json_encode($lat); ?>, <?= json_encode($lng);?>),
          zoom: <?php echo json_encode($zoom); ?>,
          mapTypeId: 'roadmap'
        });

      downloadUrl(<?= json_encode($url); ?>, function(data) {
      var xml = data.responseXML;
      var markers = xml.documentElement.getElementsByTagName("marker");
      for (var i = 0; i < markers.length; i++) {
        var name = markers[i].getAttribute("name");
        var address = markers[i].getAttribute("address");
        var id = markers[i].getAttribute("id");
        var town = markers[i].getAttribute("town").toLowerCase();
        var point = new google.maps.LatLng(
        parseFloat(markers[i].getAttribute("lat")),
        parseFloat(markers[i].getAttribute("lng")));
        var html = "<b>" + name + "</b> <br/>" + address;
        createMarker(point, id, town, html, i, map);

      }
      });
    }

    ....

    </script>

    File5= map-control-event-type-criteria.php

    <?php
    require 'inc/bootstrap.php';
    require_once 'inc/db.php';

    $db = app::getdatabase();
    $evtpar=$_GET['eP'];
    $critpar=$_GET['aP']; 
    $townURL=$_GET['aT'];

    ....

【问题讨论】:

    标签: php xml xml-parsing


    【解决方案1】:

    第 1 行的数字是否意味着问题出在 URL 或以下代码?

    表示该URL返回的数据。

    当我用 XMLlint 测试你的代码时,它会说:

    test.xml:1: 解析器错误:XML 声明只允许在文档的开头

    XML 声明必须是文档中非常的第一件事。

    前面有空格,这是不允许的。

    【讨论】:

    • 感谢@Quentin 为您提供帮助。由于我不能完全确定理解,我用 php 代码的示例编辑了我的帖子。是header("Content-type: text/xml");这应该是文档中的第一件事?
    • @michltm — 在您开始输出 XML 之前,它应该在 PHP 代码中。 XML 声明以&lt;?xml 开头。删除它前面的所有空格。
    • 好的,我将尝试找到这些空间,并在找到它们后立即返回答案。
    • 我还在寻找中!在到达此处的 php 文件之前,我有一些 php 文件调用 php 文件。我会尝试正确地制定所有这些。
    • 我不得不说我有点迷失了,找不到空间的来源。出于这个原因,我使用以 URL 结尾的最后一个文件的代码序列编辑了帖子。
    【解决方案2】:

    尝试使用标题:

    <?xml version="1.0" encoding="UTF-8"?>
    

    如果这不能解决问题,您可以查看代码,如果您输入代码我可以帮助您。

    【讨论】:

    • UTF-8 是默认值。为什么明确指定它会有帮助?
    • 因为我尝试在 XML 验证器中处理 XML 并且没有此标记,所以该验证器不会验证 XML
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多