2013-05-03 95 views
2

我試圖將一些SQL Server for XML查詢和XSL模板從舊的ASP應用程序轉換爲PHP。
基本上,應用程序從幾個查詢中組合一個XML文檔,然後使用XSL模板輸出HTML。如何將XML數據從SQL Server讀取到PHP

我已經被閱讀這篇博客:

我使用 sqlsrv_query()其次 sqlsrv_fetch()sqlsrv_get_field()獲取數據

。結果集默認返回爲XML流

我不知道如何讀取流到一個DOMDocument對象。我想我可以將輸出轉換爲字符串,然後將字符串解析爲對象,但是如何直接讀取XML流?

回答

3

如果你是如圖你鏈接的博客,暗示後的PHP數據類型獲取數據:

$xml = sqlsrv_get_field($stmt, 0, SQLSRV_PHPTYPE_STRING('UTF-8')); 

然後變量$xml包含UTF-8編碼的字符串。 PHP中的字符串始終是二進制的,而UTF-8是XML文檔的默認編碼。這在PHP中是相同的:PHP中的DOMDocument預計所有輸入字符串都是UTF-8編碼(如IntroductionDocs中所述)。

所有你需要做的是load the XML as stringDocs

$doc = new DOMDocument(); 
$result = $doc->loadXML($xml); 

然後,您可以驗證,如果這個工程通過檢查返回值,並從文檔輸出XML作爲字符串:

var_dump($result);   # should be (boolean) TRUE 
$doc->save('php://output'); # should be your XML verbatim 

這應該這樣做,讓我知道如果你使用不同的方式從數據庫中獲取。因爲這可能會有所不同,例如如果您獲得a PHP StreamDocs,則可能需要使用stream_get_contents()Docs將該流先轉換爲字符串。您可以在而不是加載流與DOMDocument在PHP中,這就是爲什麼你需要先將它轉換爲一個字符串。

看得那麼清楚:

+0

感謝您的答覆。我認爲可能有辦法直接導入流。 XML數據集非常小,所以我想轉換爲字符串和解析的開銷應該很小。 – Mark 2013-05-03 13:32:03

+0

AFAIK直接導入流是不可能的。我希望它會,例如與['XMLReader'](http://php.net/XMLReader),但像'DOMDocument'這是不可能的(但它實際上從來沒有真正的問題,這只是一個有點可惜這是不可能的)。 – hakre 2013-05-03 13:46:42

+0

但是我同意,現在我已經設法通過將輸出轉換爲字符串來構建我的XML文檔。再次感謝你的幫助。 – Mark 2013-05-03 15:35:57