배경 : * .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)의 출력을 제공합니다
이 작동?
다른 식으로 표현하면 XPath에서는 항상 접두사가 없으므로 네임 스페이스가 없습니다. 네임 스페이스의 요소에 액세스하려면 접두어가 필요합니다. 원본 문서에서 기본 네임 스페이스 인 경우에도 마찬가지입니다. –
@MichaelKay 설명해 주셔서 감사합니다. +1 –