2014-05-12 93 views
1

我目前從ReportServer數據庫中抓取一組RDL文件,並循環遍歷每個.RDL(這是一個XML文件),並將每個文本框的值寫入RDL以文件形式存儲(或者直接到屏幕上)。使用PowerShell從.RDL文件中提取文本框值

我可以從數據庫中獲取文件沒有問題,我可以遍歷每個文件,但我不能始終如一地獲取每個表中的所有文本框值。有時候會跳過表格。我最初的嘗試在一個非常基本的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的工作原理是一個簡單的RDL,其上有一個3列數據網格。當我在更復雜的報告上嘗試相同的方法時,它會炸彈,或者只抓取一些字段。可能工作

+0

難道你不能只是做一些像'[XML] $ RDLFile = GC「C:\ XML \ Report.rdl」'? – TheMadTechnician

+0

當然,但這並不能解決問題。 –

+0

對不起,只是對劇本的一般評論,根本不是答案。 – TheMadTechnician

回答

0

有一件事是嘗試selectnode方法:

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與PowerShell 3(與類似的XML),我不知道它是否會與PowerShell 2相同。

相關問題