如何将XML数据从SQL Server读入PHP

时间:2013-05-03 05:13:51

标签: php xml sql-server-2008

我正在尝试将大量SQL Server FOR XML查询和XSL模板从旧版ASP应用程序转换为PHP。
基本上,应用程序从多个查询汇编XML文档,然后使用XSL模板输出HTML。

我正在阅读这篇博文:

我使用sqlsrv_query()后跟sqlsrv_fetch()sqlsrv_get_field()来获取数据。默认情况下,结果集将返回为 XML流

我无法弄清楚如何将流读入DOMDocument对象。我想我可以将输出转换为字符串,然后将字符串解析为对象,但是如何直接读取XML流?

1 个答案:

答案 0 :(得分: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将流转换为字符串。您可以在PHP中使用 DOMDocument 加载流,这就是您需要先将其转换为字符串的原因。

参见: