我有一個已加載到Powershell xml變量的rdl。我想爲報表中的每個數據集添加一個查詢參數,但是我發現我首先必須檢查數據集是否具有任何查詢參數。將QueryParameters節點添加到rdl XML
如果一個數據集沒有任何查詢參數,那麼它沒有一個QueryParameters節點來調用AppendChild()。
我的rdl被加載到一個名爲$ target的變量中。我可以將沒有QueryParameters節點的所有DataSet放入名爲$ nodes的變量中。我的問題是,我在網上看到的大多數教程似乎都起作用,好像$節點包含指向我的$ target變量中實際節點的指針集合。但是,在更新$節點以添加QueryParameters節點後,我重新檢查$ target變量,但沒有看到它被更新。
所以問題是,如果我有一個節點的集合,使得路徑不是通過點語法可達到的直線,那麼如何以更新父變量xml的方式更新該集合的一個成員?
下面是我已經有的代碼。
# Load the rdl
[xml]$target = New-Object System.XML.XMLDocument
$target.Load(<Path-to-rdl>)
$ns = @{r='http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition';rd='http://schemas.microsoft.com/SQLServer/reporting/reportdesigner'}
$nsmgr = New-Object System.Xml.XmlNamespaceManager($target.NameTable)
$nsmgr.AddNameSpace("r",$ns.r)
$nsmgr.AddNameSpace("rd",$ns.rd)
# Grab the query nodes
$nodes = $target.SelectNodes("//r:DataSet/r:Query",$nsmgr)
# Attempt to load the QueryParameters node. If $p is $NULL I know it didn't have one.
$nodes | %{
$p = $_.SelectSingleNode("./r:QueryParameters",$nsmgr)
IF($p -eq $NULL){
$p = $target.CreateElement("QueryParameters")
# Many tutorials assume $_ here points back to xml in my $target variable
$_.AppendChild($p)
}
}
$nodes = $NULL
$nodes = $target.SelectNodes("//r:DataSet/r:Query",$nsmgr)
$nodes | %{
$p = $_.SelectSingleNode("./r:QueryParameters",$nsmgr)
# But after I reload the nodes from $target some still don't have the
# QueryParameters node I appended earlier.
IF($p -eq $NULL){
"NULL"
} ELSE {"NOT NULL"}
}
我怎樣才能確保$目標獲取與新QueryParameters節點更新,這樣,當我把它寫回到磁盤它會在那裏?
這也是我下一步需要解決的一個問題。如果我不能得到這個更新,那麼我也將無法將新的QueryParameter節點添加到每個DataSet。
謝謝你,比爾