2013-03-03 1 views
1

배경 : * .regsvr 파일의 내용을 조작하는 PowerShell 스크립트를 개발하고 싶습니다. 이 파일은 SQL Server Management Studio를 사용하여 등록 된 SQL 서버를 내보내거나 가져 오는 데 사용되는 XML 파일입니다. 여기에 blog pos은 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 

을 그리고 나에게 내가 기본 네임 스페이스를 지정하고 XPath 쿼리에 접두어를 사용하지 수있는 방법 (1)의 출력을 제공합니다

이 작동?

답변

1

URL 네임 스페이스는 URL 양식에 지정된 경우에도 존재할 필요가 없습니다. 주로 고유 한 이름입니다. 기본 네임 스페이스의 요소에 액세스하는 올바른 방법을 찾았습니다. 접두사를 지정해야합니다. 기본 네임 스페이스를 나타내는 접두어로 'dns'를 사용합니다.

+2

다른 식으로 표현하면 XPath에서는 항상 접두사가 없으므로 네임 스페이스가 없습니다. 네임 스페이스의 요소에 액세스하려면 접두어가 필요합니다. 원본 문서에서 기본 네임 스페이스 인 경우에도 마찬가지입니다. –

+0

@MichaelKay 설명해 주셔서 감사합니다. +1 –

관련 문제