如何用php寫xml?

edited 十月 2013 in PHP新手區
一般網頁有<html>標籤,加入php程式碼沒問題
可是xml沒有,要如何寫出如下xml檔?

<?xml version="1.0" encoding="UTF-8"?>
<books>
<book title="書名一" auther="作者一" />
<book title="書名二" auther="作者二" />
.................
</books>

我試過用特殊字元,可是這樣並不能產生真正的xml檔
只是看起來是而已
請教一下!


原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=1628

評論

  • edited 五月 2006
    請問你的問題是不是怎樣用 php 產生一個 xml 檔?

    PHP5 中的 SimpleXML 可以嗎? SimpleXML 可以讀入一個 XML 檔到內存處理, 也可以輸出 XML 檔. SimpleXML 的詳情可以到 PHP 的官網看看:

    http://www.php.net/manual/en/ref.simplexml.php
  • edited 五月 2006
    試試在程式的最前面加上下面這一行:
    header('Content-Type: text/xml');
    
  • edited 五月 2006
    好像都不行...
    我說詳細一點好了
    這份booklist.xml本來是靜態的,如前;
    可是我想把它改做動態的,從mysql隨機取出book title,auther的資料
    而成一份副檔名是php,實際上卻是xml的咚咚

    我試過SimpleXML 的Example 1
    會產生php與xml的<?..?>混亂無法辨別的問題
    其他方法不太會用;

    第二方法如下:
    <?php
    header('Content-Type: text/xml');
    echo '<?xml version="1.0" encoding="UTF-8"?>';
    echo "<books>";
    $db = mysql_connect("localhost", "root", "123456");
    if (!$db)
    {
    echo "Error: 無法連線. ";
    exit;
    }

    mysql_select_db("store");
    $query = "select * from books";
    if (!$query)
    {
    echo "Error: 無法讀出 ";
    exit;
    }
    $result = mysql_query($query);
    $nums=mysql_num_rows($result);

    for ($j =0 ; $j<5 ; $j++)
    {
    srand((double)microtime()*1000000);
    $i = rand(1,$nums);
    $book_title=mysql_result($result,$i,"title");
    $book_auther=mysql_result($result,$i,"auther");

    echo '  <book title="'.$book_title.'" auther="'.$book_auther.'" /><br>';
    }
    echo "</books>";
    ?>

    出來卻只有
    <book title="書名一" auther="作者一" />
    <book title="書名二" auther="作者二" />
    而且,這樣似乎也不是正確的xml...
  • edited 五月 2006
    wnjo60 寫道:
    好像都不行...
    我說詳細一點好了
    早該如此,你的時間寶貴,別人的時間更加寶貴 :-x
    而成一份副檔名是php,實際上卻是xml的咚咚
    請問這種檔案有甚麼用?
    我試過SimpleXML 的Example 1
    Example 1 根本不是 SimpleXML 的示範,裡面半句 SimpleXML 也沒有,它只是建立一個 XML 字串,作為後面 examples 中示範 SimpleXML 的工具。
    會產生php與xml的<?..?>混亂無法辨別的問題
    請問「php 與 xml 的 <?..?>」是甚麼意思?
    其他方法不太會用;
    不會吧,全世界的 progrmamers 都是用這份官方文件來學習 SimpleXML.....你不把問題說清楚,誰也幫不了你。
    echo '  <book title="'.$book_title.'" auther="'.$book_auther.'" /><br>';
    根據 XML 1.0 的官方文件 (http://www.w3.org/TR/2004/REC-xml-20040204/),「&」不是一個合法字元。「<br>」左看右看都不像是一個合法的 XML 標籤,至少後面應該有一個對應的「</br>」才算是 XML 吧。
    出來卻只有
    <book title="書名一" auther="作者一" />
    <book title="書名二" auther="作者二" />
    請問在甚麼環境下執行?如何執行?越詳細越好,你的時間寶貴,別人的時間.................. :-x
    而且,這樣似乎也不是正確的xml...
    你希望產生一個副名 php,但是內容卻是 XML 的檔案,偏偏程式卻輸出「 」和「<br>」這些看來像是 HTML 碼的東西,請恕我無能為力了。
  • edited 五月 2006
    不是這樣就好了嗎?
    echo '<?xml version="1.0" encoding="UTF-8"?> ';
    

    還是說你連 ' 跟 " 的差異都不知道?
  • edited 五月 2006
    請問這種檔案有甚麼用?
    每次的資料內容才會不一樣...
    Example 1 根本不是 SimpleXML 的示範,裡面半句 SimpleXML 也沒有,它只是建立一個 XML 字串,作為後面 examples 中示範 SimpleXML 的工具。
    謝謝,原來如此,我搞錯了,不好意思!
    我想我先多充實一下再來發問吧....
    原先的方向、想法都有問題,
    不過在我發問的那個時候,真的不知道自己的錯誤何在
    造成各位的困擾,實在是抱歉!
  • edited 五月 2006
    謝謝,原來如此,我搞錯了,不好意思!
    我想我先多充實一下再來發問吧....
    原先的方向、想法都有問題,
    不過在我發問的那個時候,真的不知道自己的錯誤何在
    造成各位的困擾,實在是抱歉!
    XML 不是 HTML,HTML 是 XML 的一個特例(這句話其實也有斟酌的,你暫時有個概念便夠了),你希望輸出甚麼語言,便應該弄明白那種語言的規格,莫要張冠李戴。

    你輸出的 XML 在瀏覽器上顯示的情況未必如你所想,那是因為瀏覽器是設計用來顯示 HTML,而非 XML。若果你用一些 XML 閱讀器,或者支援 XML 的瀏覽器(例如 Firefox),便可以檢視你輸出的 XML 是否正確。

    你在上面 四樓 的 php 程式其實已經很接近目標,只要把裡面的 HTML 東西全部丟掉,輸出的文件便是純正的 XML 了。
  • edited 五月 2006
    我想,樓主的問題主要在於,他要將 xml 用 php 輸出。

    而 apache 設定會丟給 mod_php 處理的只有副檔名為 .php 的文件。

    所以他的 xml 檔案要用 .php 為檔案結尾。

    而 xml 的開頭,使用 <?....?> 來宣告 xml 的一些屬性,但是這部份確會與 php 的 magic tag 相衝突,會造成 php 語法錯誤。

    解決的方法事實上很簡單,將該行 xml 的 <?.....?> 以 php 的程式輸出就好了。
    就是用 <?echo '<?xml version="1.0" encoding="UTF-8"?>';?>來輸出 <?xml version="1.0" encoding="UTF-8" ?>
  • edited 六月 2006
    你在上面四樓的 php 程式其實已經很接近目標,只要把裡面的 HTML 東西全部丟掉,輸出的文件便是純正的 XML 了。
    
    果然是這樣,現在已經差不多了,謝謝!

    另外問一個問題,本例中如何讓取出的亂數不重複?
    謝謝!
  • edited 六月 2006
    wnjo60 寫道:

    另外問一個問題,本例中如何讓取出的亂數不重複?
    謝謝!
    既然你問了,便告訴你這個絕技:

    select * from table order by rand()

    以後再不用在 php 裡面瞎搞了,由 MySQL 替你效勞吧。
  • edited 六月 2006
    多謝指教!
    查詢時多加入order by rand();
    那原來 php 裡取亂數的程式碼就不用了?
    還是保持原樣?還是要加修改?
  • edited 六月 2006
    我知道了!先用亂數排列的方式取出,再用mysql_fetch_array
    然後固定輸出前五筆就不會重複了!
    真是聰明啊, zzlong兄!
    多謝啦!
  • edited 六月 2006
    <?PHP
    srand((double)microtime()*1000000);
    $randval = rand();
    echo $randval;
    ?>

    語法: rand([int min], [int max]);
    rand(38, 49) 則會從 38 到 49 之間取一個亂數值,UNIX 系統包含 49、Win32 系統不包含 49

    轉自 http://member.ettoday.com/book/function.php-rand.htm
Sign In or Register to comment.