2011-08-22 79 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,如果你希望。