0

PowerShell を使用して読み取りたい名前空間を持つ要素を含む xml ファイルがあります。

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>

オンラインで見つけたいくつかの例から、XML を読み取るために次の PowerShell を作成しました。

   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.NameTablenull であることがわかりました。

誰かが理由とそれを修正するために私ができることを説明できますか?

Members別の注意として、要素を選択しようとした方法はどれもSelect-Xml機能しませんでした$xmlDoc.SelectNodes。私がそれを得ることができる唯一の方法は、以下を使用することでした:

    $xmlDoc.Members
4

2 に答える 2

2

Select-Xml次のように使用してみてください:

$ns = @{ns0='http://my.domain.com/subsite'}
$xml | Select-Xml -XPath '//ns0:Members' -Namespace $ns
于 2013-01-09T04:58:46.413 に答える
2

試す:

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 $xmlDoc.NameTable
    $ns.AddNamespace("ns0", "http://my.domain.com/subsite")
    $node = $xmlDoc.SelectNodes("ns0:Members")

タイプミスを修正しました。

于 2013-01-09T22:10:11.967 に答える