2

従来の ASP アプリケーションから PHP に、多数の SQL Server FOR XML クエリと XSL テンプレートを変換しようとしています。
基本的に、アプリはいくつかのクエリから XML ドキュメントを組み立て、XSL テンプレートを使用して HTML を出力します。

私はこのブログ投稿を読んでいます:

sqlsrv_query()続いてsqlsrv_fetch()andを使用し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 でエンコードされていることを想定しています (概要ドキュメントで概説されています)。

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 に答える