我有一个 xml 文件,其中包含我希望使用 PowerShell 读取的带有命名空间的元素。
示例 XML:
<ns0:Members xmlns:ns0="http://my.domain.com/subsite">
<Member>
<MemberDetails>
<Name>Blah de Blah Blah</Name>
<Email>blah@lost.com</Email>
</MemberDetails>
</Member>
</Members>
从我在网上找到的一些示例中,我编写了以下 PowerShell 来读取 XML:
function Get-ScriptDirectory
{
return Split-Path $script:MyInvocation.MyCommand.Path
}
$xmlFile = Join-Path (Get-ScriptDirectory) "MyXmlFile.xml"
[xml]$xmlDoc = Get-Content $xmlFile
$ns = new-object Xml.XmlNamespaceManager $xml.NameTable
$ns.AddNamespace("ns0", "http://my.domain.com/subsite")
$node = $xmlDoc.SelectNodes("ns0:Members")
但是,我收到以下错误:
New-Object : Constructor not found. Cannot find an appropriate constructor for type Xml.XmlNamespaceManager.
我在网上搜索了错误,但我发现的唯一帖子建议仔细检查 PowerShell 的版本是版本 2。
我跑了$Host.Version
,这给了我:
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
当我使用 PowerGui Editor 单步执行脚本时,我发现它$xml.NameTable
是空的。
谁能解释为什么以及我能做些什么来解决它?
另一方面,我尝试选择Members
元素的方法都没有奏效,包括Select-Xml
and $xmlDoc.SelectNodes
。我能得到它的唯一方法是使用:
$xmlDoc.Members