1
背景:我想開發一個PowerShell腳本來操作* .regsvr文件的內容。這是一個XML文件,用於使用SQL Server Management Studio導出/導入註冊的SQL服務器。這是一個blog pos t,講述如何使用SQL查詢來創建文件。我想做的不僅僅是創建一個文件,我想操縱現有的導出文件。默認的XML名稱空間是否需要前綴?
問題:我遇到的問題是我無法弄清楚如何使用默認名稱空間讀取XmlDocument。
實例與命名空間如預期,我不能去上班:
$xmlstring = @'
<?xml version="1.0"?>
<model xmlns="http://schemas.serviceml.org/smlif/2007/02">
<identity/>
</model>
'@
$doc = new-object System.Xml.XmlDocument
$doc.LoadXml($xmlstring)
$nsmgr = new-object System.Xml.XmlNamespaceManager($doc.NameTable)
$nsmgr.AddNamespace([String]::Empty, "http://schemas.serviceml.org/smlif/2007/02")
$nsmgr.PushScope()
$xpath = "/model"
$doc.SelectNodes($xpath, $nsmgr).count
輸出爲0,但1預期。
這工作:
$xmlstring = @'
<?xml version="1.0"?>
<model xmlns="http://schemas.serviceml.org/smlif/2007/02">
<identity />
</model>
'@
$doc = new-object System.Xml.XmlDocument
$doc.LoadXml($xmlstring)
$nsmgr = new-object System.Xml.XmlNamespaceManager($doc.NameTable)
$nsmgr.AddNamespace("x", "http://schemas.serviceml.org/smlif/2007/02")
$nsmgr.PushScope()
$xpath = "/x:model"
$doc.SelectNodes($xpath, $nsmgr).count
,給我的1輸出如何指定默認的命名空間,並避免在XPath查詢使用前綴?
或者換句話說:在XPath中,沒有前綴總是意味着沒有命名空間。要訪問名稱空間中的元素,您需要一個前綴。即使在源文檔中,它也是默認的命名空間。 – 2013-03-03 23:07:53
@MichaelKay感謝您的澄清。 +1 – 2013-03-04 01:35:49