我正在尝试转换一些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