3

私の質問に答えられる人は誰でも、BIG FAT GOLD MEDAL OF AWESOMENESS に値します!

MySQL テーブルの内容を簡単な XML 形式に変換しようとしています。私はうまく動作するPHPを少し実行しています.XMLを見ることができます(良い時代です)。ただし、MySQL テーブルには、エンコードされていない HTML テーブル コードが入力されたフィールドがいくつかあります。取得した各フィールド値を CDATA タグ内にラップしています。xml タグが閉じていることを確認しましたが、エラーが発生していて理由がわからないため、何かが欠けているのではないかと考えています (Bad回)。私には問題ないように見えたので、これを Excel で開こうとしました (クライアントにはそのように表示されます)。「package」の開始タグが「long_description」の終了タグと一致していると表示されました。

http://www.shavesgreensafaris.com/display.phpは私が取り組んでいるページで、そこでデータを確認できます。

これは私が使用しているコードです...

        $xml          = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
        $root_element = "packages";
        $xml         .= "<$root_element>";


        if(mysql_num_rows($result)>0)
        {
           while($result_array = mysql_fetch_assoc($result))
           {
              $xml .= "<package>";

              //loop through each key,value pair in row
              foreach($result_array as $key => $value)
              {
                 //$key holds the table column name
                 $xml .= "<$key>";

                 //embed the SQL data in a CDATA element to avoid XML entity issues
                 $xml .= "<![CDATA[$value]]>"; 

                 //and close the element
                 $xml .= "</$key>";
              }

              $xml.="</package>";
           }
        }

//close the root element
$xml .= "</$root_element>";

//send the xml header to the browser
header ("Content-Type:text/xml"); 

//output the XML data
echo $xml;

私は一体何を間違っているのでしょうか?!


編集

OK、310 行目付近の long_description タグから「<」を 1 つ削除する何かがあるようです。それを ">long_description> として表示したい場合は、ビュー ソースで検索できます。何か非常に奇妙なことが起こって、タグが正しく形成されていません。私が使用しているコードは、すべての $keys に山括弧の開始と終了を確実に配置しているため、これがどのように発生するかは完全にはわかりませんでした。それは一度だけ起こりますが、他のすべてを詰め込んでいるようです.

なぜこれが起こっているのか誰にも分かりますか?

どんな助けでも大歓迎です、そして前もって感謝します!

宝石

4

1 に答える 1

2

DOMはこれにアプローチする方法だと思います。このコードは一見やや面倒に見えるかもしれませんが、すべての出力フォーマットを処理してくれます。

<?php

  // The names of the root node and the node that will contain a row
  $root_element = "packages";
  $row_element = "package";

  // Create the DOMDocument and the root node
  $dom = new DOMDocument('1.0', 'utf-8');
  $rootNode = $dom->appendChild($dom->createElement($root_element));

  // Loop the DB results
  while ($row = mysql_fetch_assoc($result)) {

    // Create a row node
    $rowNode = $rootNode->appendChild($dom->createElement($row_element));

    // Loop the columns
    foreach ($row as $col => $val) {

      // Create the column node and add the value in a CDATA section
      $rowNode->appendChild($dom->createElement($col))
              ->appendChild($dom->createCDATASection($val));

    }

  }

  // Output as string
  echo $dom->saveXML();
于 2012-06-22T11:28:08.483 に答える