2016-05-09 23 views
1

は、私はいくつかのXMLを持っている:PowerShellの、XML名前空間と

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP:Body> 
    <P2MessageServiceStatus> 
     <CONNECTION>CONNECTION_CONNECTED</CONNECTION> 
     <ROUTER>ROUTER_CONNECTED</ROUTER> 
    </P2MessageServiceStatus> 
    </SOAP:Body> 
</SOAP:Envelope> 

があるため、名前空間のそれに対処することはできません。たくさん試してみましたが、動作していません。

[string]$xpath = '/SOAP:Envelope/SOAP:Body/P2MessageServiceStatus/@CONNECTION' 

$wc = New-Object Net.WebClient 
[xml]$stuff = $wc.DownloadString($url) 

$ns = New-Object Xml.XmlNamespaceManager $stuff.NameTable 
$ns.AddNamespace("SOAP", $xmlns) 

$xmlvalue = $stuff.SelectSingleNode($xpath, $ns) 

エラー - 必要名前空間マネージャまたはXsltContext

$xmlvalue = $stuff.SelectSingleNode($xpath,'SOAP') 

エラーの場合 - "SELECTSINGLENODE" のための過負荷を見つけることができません

そのxpathクエリを名前空間で動作させるには?

答えて

2

あなたの$xmlnsが定義されていません。これは動作します:

[string]$xpath='/SOAP:Envelope/SOAP:Body/P2MessageServiceStatus/CONNECTION' 

$namespaceMgr = New-Object System.Xml.XmlNamespaceManager $stuff.NameTable 
$namespace = $stuff.DocumentElement.NamespaceURI 
$namespaceMgr.AddNamespace("SOAP", $namespace) 


$stuff.SelectSingleNode($xpath,$ns) 

:またアクセス特性をPowerShellのようなノードができます:私は$ stuff.SelectSingleNode($ののxpath、$名前空間)を使用する場合

$stuff.DocumentElement.Body.P2MessageServiceStatus.CONNECTION 
+0

が動作しませんのまったく。 $ stuff.SelectSingleNode($ xpath、$ namespaceMgr)の場合は値を返しますが、例外はあります。 'SelectSingleNodeと2つのメソッドの再読み込みが見つかりません...' ...これは正常ですか? –

+0

omg私は仕事のPC上でその例外を持っていますが、私のサーバーではありません...それは動作します。たくさんありがとう –

+0

変数$ namespaceMgrが表示されたら、xmlns、xml、SOAPの3つが表示されます。エラーの原因になりますか? –