2013-05-03 6 views
2

레거시 ASP 응용 프로그램에서 PHP로 여러 SQL Server FOR XML 쿼리와 XSL 템플릿을 변환하려고합니다.
기본적으로이 앱은 여러 검색어의 XML 문서를 조합 한 다음 XSL 템플릿을 사용하여 HTML을 출력합니다.SQL Server에서 PHP로 XML 데이터를 읽는 방법

나는이 블로그 게시물을 읽는 것 : 나는 데이터를 얻을 수 sqlsrv_fetch() 다음 sqlsrv_query()sqlsrv_get_field()을 사용하고

합니다. 결과 집합은 기본적으로 XML 스트림으로 반환됩니다.

스트림을 DOMDocument 개체로 읽는 방법을 알아낼 수 없습니다. 출력을 문자열로 변환 한 다음 문자열을 객체로 구문 분석 할 수 있다고 생각하지만 XML 스트림을 직접 읽는 방법은 무엇입니까?

답변

3

당신은 당신이 연결 한 블로그 포스트에서와 같이 PHP 데이터 형식을 암시하여 데이터를 가져 오는 경우 :

$xml = sqlsrv_get_field($stmt, 0, SQLSRV_PHPTYPE_STRING('UTF-8')); 

그런 다음 변수 $xml는 UTF-8 인코딩 된 문자열이 포함되어 있습니다. PHP의 문자열은 항상 바이너리이고 UTF-8은 XML 문서의 기본 인코딩입니다. 이것은 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을 사용하여 스트림을 먼저 문자열로 변환 할 수 있습니다. 로드 스트림 DOMDocument을 PHP로로드 할 수 있으므로 먼저 문자열로 변환해야합니다.

도 참조 : 답장을

+0

감사합니다. 스트림을 직접 가져 오는 방법이있을 거라고 생각했습니다. XML 데이터 세트는 매우 작기 때문에 문자열로 변환하고 구문 분석하는 데 소요되는 오버 헤드가 적어야한다고 생각합니다. – Mark

+0

AFAIK 직접 스트림을 가져올 수 없습니다. 예를 들어 [XMLReader'] (http://php.net/XMLReader)를 사용하면 좋겠지 만 DOMDocument와 마찬가지로이 방법은 불가능합니다. (그러나 실제적으로는별로 문제가되지 않았습니다. 안타깝게도 가능하지 않습니다). – hakre

+0

그러나 나는 이제 출력을 문자열로 변환하여 XML 문서를 만들 수 있다는 데 동의한다. 도와 줘서 고마워. – Mark

관련 문제