我想從 MsDtsSrvr.ini 中洗掉一個元素,即整個節點:
<Folder xsi:type="SqlServerFolder">
<Name>MSDB</Name>
<ServerName>.</ServerName>
</Folder>
檔案如下所示:
<?xml version="1.0" encoding="utf-8"?>
<DtsServiceConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<StopExecutingPackagesOnShutdown>true</StopExecutingPackagesOnShutdown>
<TopLevelFolders>
<Folder xsi:type="SqlServerFolder">
<Name>MSDB</Name>
<ServerName>.</ServerName>
</Folder>
<Folder xsi:type="FileSystemFolder">
<Name>File System</Name>
<StorePath>..\Packages</StorePath>
</Folder>
</TopLevelFolders>
</DtsServiceConfiguration>
我沒有做的是將整個節點變為變數,除非我執行以下操作:
$sqlserverFolder = $xmlFile.SelectSingleNode("/DtsServiceConfiguration/TopLevelFolders/Folder")
$sqlServerFolder.ParentNode.RemoveChild($sqlServerFolder)
這實作了我想要的,但明顯的問題是我沒有選擇這個特定的節點,我想 powershell 只是選擇第一個。我寧愿避免去了解真正發生了什么。
當我使用此腳本選擇所有節點時:
$xmlFile.SelectNodes("/DtsServiceConfiguration/TopLevelFolders/Folder")
我得到以下結果:
type Name ServerName
---- ---- ----------
SqlServerFolder MSDB .
FileSystemFolder File System
所以我試圖運行這樣的東西:
$xmlFile.SelectNodes("/DtsServiceConfiguration/TopLevelFolders/Folder[@type='SqlServerFolder']")
但它不回傳任何結果。我怎樣才能抓住這個特定的節點,以便我可以洗掉它?
uj5u.com熱心網友回復:
使用local-name()XPath 函式按xsi:type屬性的本地名稱 ( type)過濾屬性:
$xmlFile.SelectSingleNode("/DtsServiceConfiguration/TopLevelFolders/Folder[@*[local-name()='type' and . ='SqlServerFolder']]")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/348777.html
