2

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

我正在阅读这篇博文:

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

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

4

1 回答 1

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 编码的(如Introduction 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 Stream Docs,您可能希望首先使用stream_get_contents()Docs将流转换为字符串。您不能在 PHP 中使用DOMDocument加载流,这就是您需要先将其转换为字符串的原因。

另见:

于 2013-05-03T11:05:23.010 回答