2013-02-25 3 views
0

큰 단일 단일 XML 결과를 반환하는 SQL의 저장 프로 시저를 실행하는 powershell 스크립트가 있습니다. 이 XML 결과를 파일에 저장해야합니다.PowerShell, SQL에서 큰 XML 결과 서식 지정

불행하게도 출력물이 PowerShell에 의해 훼손된 것처럼 보이게 만듭니다.

$xmldataset.tables[0] | ft -wrap -hidetableheaders | out-file C:\xml_result.xml 

그게 전부 결과를 얻지 만 화면에 표시하는 것처럼 결과를 래핑합니다. 이렇게하면 대부분의 XML 파서가 손상됩니다.

$xmldataset.tables[0] | ft -hidetableheaders | out-file C:\xml_result.xml 

이는 내 결과를 임의로 두 줄로 나눠서 각 줄을 잘라냅니다.

-wrap을 사용하지 않으면 SQL에서 반환되는 행이 하나이더라도 결과가 두 행에 저장됩니다.

다음은 SQL이 양호하게는뿐만 아니라 SQL 결과에 의해 생성 된 바꿈을 저장, 파일로 저장에서 난 그냥 출력을 얻을 수있는 방법은 전체 코드

$SqlCmd.CommandText = "exec dbo.sp_getXML" 
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server = $SqlServer; Database = $SqlCatalog; Integrated Security = True" 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.CommandText = $SqlQuery 
$SqlCmd.Connection = $SqlConnection 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 
$xmlDataSet = New-Object System.Data.DataSet 
$SqlAdapter.Fill($xmlDataSet) 

입니다.

답변

0

이 같은 형식을 제거 할 수 있습니다

$xmldataset.tables[0] | ft -wrap -hidetableheaders | out-string | out-file C:\xml_result.xml 
+0

불행히도, 여전히 줄무늬가 추가됩니다. 콘솔에 결과를 표시하는 경우 (즉, 창 크기에 따라 변경되는 경우) 정상적으로 추가 할 위치에 추가하는 것 같습니다. – coreno

+0

그것이 바로 format-table의 기능입니다. 출력을 파일로 저장하려면, ft를 사용하지 않고 설정 내용으로 직접 파이프하십시오. – mjolinor

+0

그렇지 않으면 헤더를 포함하고 데이터 결과를 두 행으로 나누기 때문에 형식 표를 작성했습니다. – coreno

0

이 나를 위해 최선을 노력 결국 것입니다.

$xml = "" 
for ($i=0; $i -lt $xmldataset.tables[0].rows.count; $i++){ 
    $xml = $xml+$xmldataset.tables[0].rows[$i][0].ToString() 
} 
$xml | out-file -filepath C:\Users\mvrydaghs\Documents\test_copy\xml_result.xml 

무작위로 결과를 여러 행으로 나누기 때문에 루프가 필요했습니다. 루프에있는 파일에 직접 쓰는 것은 여전히 ​​불필요하고 줄 바꿈을 위해 사용되지 않으므로 추가 변수를 사용하여 연결을 작성한 다음 파일에이를 써야했습니다.