我正在尝试将大量SQL Server FOR XML查询和XSL模板从旧版ASP应用程序转换为PHP。
基本上,应用程序从多个查询汇编XML文档,然后使用XSL模板输出HTML。
我正在阅读这篇博文:
我使用sqlsrv_query()
后跟sqlsrv_fetch()
和sqlsrv_get_field()
来获取数据。默认情况下,结果集将返回为 XML流。
我无法弄清楚如何将流读入DOMDocument
对象。我想我可以将输出转换为字符串,然后将字符串解析为对象,但是如何直接读取XML流?
答案 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 加载流,这就是您需要先将其转换为字符串的原因。
参见: