使用冒号在powershell中搜索XML

时间:2011-08-22 18:46:59

标签: xml powershell xml-namespaces

我的XML格式为:

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

我可以将文件的内容添加到$ xml变量中,但是我遇到了“val:root”的问题。

感谢您的帮助!

编辑:

我尝试了$ xml。“val:root”,$ xml.val,$ xml.'val:root'和$ xml。{val:root}。在Mizo的回答中找到了解决方案:

  

$ XML。的 .value的

3 个答案:

答案 0 :(得分: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数据,可以在虚拟根中声明val命名空间作为解决方法:

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

    然后你可以访问元素:

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

如果您愿意,请将urn:dummy替换为相关标识符。

答案 1 :(得分:3)

所以即使没有所有信息,我也会对这个问题进行一次尝试。根据您提供的示例XML,您的XML格式不正确。你至少有两个问题。第一个是没有匹配关闭标记的标记。第二个是你使用命名空间而没有声明它。要解决此问题,请更改此:

<val:root>

对此:

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

如果您愿意,可以使用更合适的URI。

答案 2 :(得分:-1)

您只需在加载XML文件时定义命名空间。

http://huddledmasses.org/xpath-and-namespaces-in-powershell/