2014-05-12 7 views
1

현재 ReportServer 데이터베이스에서 RDL 파일 집합을 가져 와서 각 .RDL (XML 파일)을 반복하고 각 텍스트 상자의 값을 RDL로 작성합니다 파일 (또는이 시점에서 화면에만 표시).PowerShell을 사용하여 .RDL 파일에서 TextBox 값 가져 오기

데이터베이스에서 파일을 가져올 수 있으며 각 파일을 반복 할 수는 있지만 각 테이블의 모든 텍스트 값을 일관되게 가져올 수는 없습니다. 때때로 테이블을 건너 뜁니다. 초기 시도는 매우 기본적인 RDL 파일에서 수행되었습니다. 아래 예제는 헤더 행의 텍스트 상자 이름을 가져 오는 것입니다.

$FilePath = "C:\XML\Report.rdl" 
[System.Xml.XmlDocument]$RDLFile = New-Object system.Xml.XmlDocument 
$RDLFile.load($FilePath) 
clear 

     foreach($textbox in $RDLFile.Report.Body.ReportItems.Table.Header.TableRows.TableRow.TableCells.TableCell) 
      { 
        $textboxname = $textbox.ReportItems.Textbox.Name 
        Write-Host($textboxname) 
      } 

이 RDL은 단일 3 열 데이터 그리드가있는 간단한 RDL이었습니다. 더 복잡한 보고서에서 같은 방법을 시도하면 폭탄이 터지거나 일부 필드 만 잡습니다.

http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.selectnodes.aspx

그것은 당신은 내가 위의 시도

$FilePath = "C:\XML\Report.rdl" 
[System.Xml.XmlDocument]$RDLFile = New-Object system.Xml.XmlDocument 
$RDLFile.load($FilePath) 
$TableNames = $RDLFile.SelectNodes("//ReportItems/Textbox/Name") 

foreach($textbox in $TableName){ 
    $textbox 
    ##Or $textbox.attribute if trying to pull an attribute 
} 

점 표기법보다 더 쉬울 수는 XPath를 선택 드리겠습니다 : 작동 할 수 있습니다

+0

'[XML] $ RDLFile = GC "C : \ XML \ Report.rdl"'같은 것을 할 수 없습니까? – TheMadTechnician

+0

물론, 문제를 해결하기 위해 아무 것도하지 않습니다. –

+0

죄송합니다. 일반적으로 스크립트에 대한 의견 일뿐입니다. 전혀 답변이 아닙니다. – TheMadTechnician

답변

0

한가지으로 selectNode 방법을 시도 powershell 3 (비슷한 xml)을 사용하면 PowerShell 2에서도 똑같이 작동하는지 알 수 없습니다.