2011-08-22 34 views
4

PowerShell的XML我在格式的XML:搜索與結腸

<val:root> 
    <bla> 
    <value>1234</value> 
</val:root> 

我能做得到,內容的文件到$ xml變量的,但我有與「VAL麻煩:根」。

感謝您的幫助!

編輯:

我試過$ XML。 「VAL:根」,$ xml.val,$ xml.'val:根」和$ {XML VAL:根}。在Mizo的答案中找到解決方案:

$ xml。 .value的

+1

「但我有難同 」VAL:根「」 - 需要更多的細節。什麼麻煩?你想做什麼?什麼不起作用?有錯誤嗎?你使用什麼PS命令?預期的行爲是什麼?實際行爲如何不同? – EBGreen

+2

我的猜測是你得到一個未聲明的命名空間錯誤? – EBGreen

+0

對不起,應該更詳細。增加了一些信息。感謝您幫助EBGreen。 –

回答

5

您的XML文件缺少val命名空間的聲明。此外,<bla>元素未終止。

  • 放入<root>元素的命名空間聲明:

    <val:root xmlns:val="urn:dummy"> 
    

    然後,你可以做

    PS C:\> $xml = [xml] (get-content test.xml) 
    PS C:\Users\mizo\test> $xml.root.value 
    1234 
    
  • 如果你沒有對XML數據的控制,你可以聲明作爲變通方法的dummy根中的val名稱空間:

    $xml = [xml] ("<dummyroot xmlns:val='urn:dummy'>" + 
           (get-content test.xml) + 
           "</dummyroot>") 
    

    然後,您可以訪問的元素:

    PS C:\> $xml.dummyroot.root.value 
    1234 
    

更換urn:dummy與相關標識,如果你想。

+0

這會起作用,但我認爲它解決了錯誤的問題,因爲如果xml試圖用於某些其他目的,它仍然會變形。 – EBGreen

+0

@EBGreen,我的答案假設OP無法控制輸入XML數據,通常情況就是這樣。你是對的 - 如果可能的話,最好的方法是修復XML文件本身。我相應地編輯了我的答案。 – mizo

3

所以我要好好看看這個問題一刺,即使沒有所有的信息。根據您提供的示例XML,您的XML格式不正確。你至少有兩個問題。第一個是沒有匹配關閉標籤的標籤。第二個是你使用一個名字空間而不用聲明它。爲了解決這個問題,改變這種:

<val:root> 

要這樣:

<val:root xmlns:val="http://www.w3.org/TR/html4/"> 

或者用一個更合適的URI,如果你希望。