循环内生成的结构中的某些标记上的标记错误


Markup error on some tags in a structure generated inside a loop

我在使用 PHP 的 while 循环中生成的 XML 结构中遇到了一个问题,最好说是一个错误。

这是我用来访问我的数据库并使用检索到的信息生成 XML 的 PHP 代码(此外,我之前将内容类型定义为文本/xml):

<?php include("basededatos.php"); $query = mysql_query("SELECT tipo,nombre,direccion,telefono,dias_habiles,sabados,domingos,coordenadas FROM iglesias"); while($row = mysql_fetch_array($query)) : ?>
<iglesia cords="<?php echo $row["coordenadas"]; ?>" tipo="<?php echo utf8_encode($row["tipo"]); ?>">
    <nombre><?php echo utf8_encode($row["nombre"]); ?></nombre>
    <direccion><?php if($row["direccion"]==""){echo "Dirección no especificada";} else {echo utf8_encode($row["direccion"]);} ?></direccion>
    <telefono><?php if($row["telefono"]==""){echo "Teléfono no especificado";} else {echo utf8_encode($row["telefono"]);} ?></telefono>
    <horarios>
        <dias_habiles><?php if($row["dias_habiles"]==""){echo "Sin información";} else {echo utf8_encode($row["dias_habiles"]);} ?></dias_habiles>
        <sabados><?php if($row["sabados"]==""){echo "Sin información";} else {echo utf8_encode($row["sabados"]);} ?></sabados>
        <domingos><?php if($row["domingos"]==""){echo "Sin información";} else {echo utf8_encode($row["domingos"]);} ?></domingos>
    </horarios>
</iglesia>

很好,现在,多亏了这一点,我获得了一个大的 XML,由于我的数据库中有 255 行,因此超过 2500 行,但有时我只有一个标签出现奇怪的错误,就像最后一个:

<iglesia cords="-34.59915445189461, -58.39169159531593" tipo="Parroquia">
<nombre>Parroquia Nuestra Señora del Carmen</nombre>
<direccion>Rodriguez Peña 840</direccion>
<telefono>011 4816 3511</telefono>
<horarios>
    <dias_habiles>8:00, 11:30, 19:30</dias_habiles>
    <sabados>8:00, 17:30, 19:00</sabados>
    <domingos>8:30, 11:00, 12:15, 17:30, 19:00, 20:15</domingos>
</horarios>
</iglesia>
<iglesia cords="-34.595964052770476, -58.40230107307434" tipo="Parroquia">
<nombre>Parroquia Nuestra Señora del Carmelo</nombre>
<direccion>Marcelo T. de Alvear 2465</direccion>
<telefono>011 4821 5954</telefono>
<horarios>
    //Look here, the next line
    dias_habiles>8:00, 11:00, 19:00, 20:00</dias_habiles>
    <sabados>8:00, 11:00, 19:00, 20:00</sabados>
    <domingos>8:00, 10:00, 11:00, 12:00, 19:00, 20:00, 21:00</domingos>
</horarios>
</iglesia>

如您所见,dias_habiles标签中缺少<,但之前dias_habiles的标签是正确的,并且在该错误之后,所有dias_habiles都得到了很好的标记。

此外,这个标签并不总是问题,它只是一个示例,它可以发生在任何随机标签上,在 XML 中只有一次,没有传播。为什么?如何?

用于调试目的...替换数据库中的所有数据,例如

<?php echo utf8_encode($row["nombre"]); ?>

带有控制文本,例如:

<?php echo "Control text"; ?>

查看问题是否消失 - 如果是,那么您可以确定问题与来自数据库的"数据"格式有关。 您可能需要将字符串格式化函数应用于从数据库中抓取的文本。一些消毒的子路等。

如果问题没有消失 - 那么它显然是其余的问题。 无论哪种方式,您的头痛都会减半。