2013-03-03 108 views
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查詢使用前綴?

回答

1

即使以URL形式指定XML命名空間也不一定存在。他們主要是唯一的名字。您已經找到了訪問默認名稱空間中元素的正確方法 - 您必須指定一個前綴。我使用'dns'作爲前綴來表示默認的命名空間。

+2

或者換句話說:在XPath中,沒有前綴總是意味着沒有命名空間。要訪問名稱空間中的元素,您需要一個前綴。即使在源文檔中,它也是默認的命名空間。 – 2013-03-03 23:07:53

+0

@MichaelKay感謝您的澄清。 +1 – 2013-03-04 01:35:49

相關問題