1

PHP の while ループで生成された XML 構造に問題があります。バグと言うほうが適切です。

これは、DB にアクセスし、取得した情報を使用して XML を生成するために使用する PHP コードです (また、以前はコンテンツ タイプを text/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>

これで、DB に 255 行あるおかげで 2500 行を超える大きな XML を取得できましたが、最後のタグのように 1 つのタグだけで奇妙なエラーが発生することがあります。

<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 で 1 回だけ、伝播なしで発生する可能性があります。なんで?どのように?

4

1 に答える 1

1

デバッグ目的で... DBのすべてのデータを次のように置き換えます

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

次のような制御テキストを使用します。

<?php echo "Control text"; ?>

問題が解決するかどうかを確認してください。そうであれば、問題がデータベースからの「データ」の形式に関連していることを確認できます。DB から取得するテキストに文字列書式設定関数を適用する必要がある場合があります。いくつかのサニタイズサブルーチンなど

問題が解決しない場合は、明らかに残りの問題です。いずれにせよ、頭痛は半減します。

于 2013-01-25T00:13:55.657 に答える