2015-12-15 40 views
1

這裏是一塊XML文件,從中我想用PowerShell的代碼(這裏172.31.24.8)提取IP地址:試圖讓XML元素

<?xml version="1.0"?> 
<Configuration xmlns="http://www.tandberg.com/XML/CUIL/2.0" product="Cisco Codec" version="TC7.3.2.14ad7cc" apiVersion="2"> 
    <SIP item="1"> 
    <Profile item="1" maxOccurrence="1"> 
     <Proxy item="1" maxOccurrence="4"> 
     <Address item="1" valueSpaceRef="/Valuespace/STR_0_255_NoFilt">172.31.24.8</Address> 
     <Discovery item="1" valueSpaceRef="/Valuespace/TTPAR_AutoManual">Manual</Discovery> 
     </Proxy> 
    </Profile> 
    </SIP> 
</Configuration> 

我試圖用Select-Xml在其他說明StackOverflow示例,但到目前爲止尚未成功。

正確實現此目的最簡單的方法是什麼?

+0

對於PowerShell代碼幫助:顯示PowerShell代碼,並解釋如預期什麼行不通。 –

回答

3

我對Powershell並不熟悉,所以我無法幫助您使用Powershell代碼,但我認爲Select-Xml可以用於XPath表達式。

鑑於你的XML文檔,因爲你能以某種註冊默認命名空間,下面的XPath表達式將工作:

/Configuration/SIP/Profile/Proxy/Address/text() 

如果您不能註冊了一個默認的命名空間,或許你可以註冊一個前綴和命名空間,例如

/tb:Configuration/tb:SIP/tb:Profile/tb:Proxy/tb:Address/text() 

其中tb必須與命名空間http://www.tandberg.com/XML/CUIL/2.0Here is a link,它解釋瞭如何聲明命名空間。


如果選擇的XML不能與命名空間的處理,使用

/*[local-name() = 'Configuration']/*[local-name() = 'SIP']/*[local-name() = 'Profile']/*[local-name() = 'Proxy']/*[local-name() = 'Address']/text() 

和所有路徑表達式的唯一結果將是

172.31.24.8 
0

我終於得到它的工作。

下面是一個返回所需輸出的示例代碼片段。

$Path="Path\to\my\file.xml" 
$Namespace = @{tb="http://www.tandberg.com/XML/CUIL/2.0"} 
$xml = Select-Xml -Path $Path -Namespace $Namespace -XPath "//tb:Address" 
$xml | foreach {$_.node.InnerXML} 

這將返回IP地址值。

我原來的代碼沒有在XPath中指定「tb:」,那是我的錯誤。

感謝您的幫助!

問候, 弗洛裏安