【问题标题】:How to read XML data from SQL Server into PHP如何将 SQL Server 中的 XML 数据读入 PHP
【发布时间】:2013-04-27 10:49:06
【问题描述】:

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

我正在阅读这篇博文:

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

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

【问题讨论】:

    标签: php xml sql-server-2008


    【解决方案1】:

    如果您通过提示您链接的博客文章中显示的 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 加载流,这就是为什么您需要先将其转换为字符串的原因。

    参见:

    【讨论】:

    • 感谢您的回复。我认为可能有一种方法可以直接导入流。 XML 数据集非常小,所以我猜转换为字符串和解析的开销应该很小。
    • AFAIK 无法直接导入流。我希望它会,例如 XMLReader,但就像 DOMDocument 一样,这是不可能的(但实际上这对我来说从来都不是问题,只是有点遗憾这是不可能的)。
    • 我同意,但是,我现在设法通过将输出转换为字符串来构建我的 XML 文档。再次感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多