如何从SQL Server读取XML数据到PHP


How to read XML data from SQL Server into PHP

我正在尝试转换一些SQL Server FOR XML查询和XSL模板,从一个传统的ASP应用程序到PHP。
基本上,应用程序从几个查询中组装一个XML文档,然后使用XSL模板输出HTML。

我一直在读这篇博文:

  • 使用PHP使用SQL Server结果集作为XML(2011年7月by Brian Swan)

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

我不知道如何将流读入DOMDocument对象。我想我可以将输出转换为字符串,然后将字符串解析为对象,但是如何直接读取XML流呢?

如果您正在通过提示php -data类型获取数据,如您所链接的博客文章所示:

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

那么变量$xml包含一个UTF-8编码的字符串。PHP中的字符串总是二进制的,而UTF-8是XML文档的默认编码。这在PHP中也是一样的:DOMDocument在PHP中期望所有输入字符串都是UTF-8编码的(如介绍Docs所述)。你所需要做的就是将XML加载为字符串Docs:

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

然后,您可以通过检查返回值并将XML作为字符串从文档中输出来验证这是否有效:

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

这应该做到这一点,让我知道如果你使用不同的方式从数据库中获取。因为这可能会以不同的方式工作,例如,如果你得到一个PHP流Docs你可能想要使用 stream_get_contents() Docs首先将流转换为字符串。你可以在PHP中用DOMDocument加载流,这就是为什么你需要先把它转换成一个字符串。

参见:

  • 默认PHP数据类型- SQL Server 2008 R2MSDN
  • 如何指定PHP数据类型- SQL Server 2008 R2MSDN