背景:我想开发一个 PowerShell 脚本来操作 *.regsvr 文件的内容。这是一个 XML 文件,用于使用 SQL Server Management Studio 导出/导入已注册的 SQL 服务器。这是一篇关于使用 SQL 查询创建文件的博客文章。我想做的不仅仅是创建一个文件,我还想操作现有的导出文件。
问题:我遇到的问题是我无法弄清楚如何使用默认名称空间读取 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 查询中使用前缀?