从XML中获取具有特定名称的所有节点的值
发布时间:2020-12-16 23:12:36 所属栏目:百科 来源:网络整理
导读:我遇到了从 XML获取具有特定名称的节点的所有值的最有效方法的问题. 例如: h1MyNodeNode One/MyNodeh2 MyNodeNote Two/MyNode DiffrentNodeI dont want that/DiffrentNode h3 MyNodeNode Three/MyNode /h3/h2HHH1 MyNodeNode Four/MyNode/HHH1/h1g2 MyNodeN
我遇到了从
XML获取具有特定名称的节点的所有值的最有效方法的问题.
例如: <h1> <MyNode>Node One</MyNode> <h2> <MyNode>Note Two</MyNode> <DiffrentNode>I dont want that</DiffrentNode> <h3> <MyNode>Node Three</MyNode> </h3> </h2> <HHH1> <MyNode>Node Four</MyNode> </HHH1> </h1> <g2> <MyNode>Node Five</MyNode> </g2> 从XML我想得到这些值: >节点一 我希望能够像这样的代码做同样的事情: <h1> <h2 MyArgument = "Argument One" Stuff = "I dont want that"> <DiffrentNode>Something I dont want</DiffrentNode> <h3 MyArgument = "Argument Two" Stuff = "I dont want that too"> </h3> </h2> <HHH1> <DiffrentNode>Something I dont want</DiffrentNode> </HHH1> </h1> <g2 MyArgument = "Argument Three"> <DiffrentNode>Something I dont want</DiffrentNode> </g2> 得到: >论证一 有任何想法吗?到目前为止,我尝试过: $xdoc = New-Object System.Xml.XmlDocument $file = Resolve-Path("C:CompiledDynoview.xml") $xdoc.load($file) [xml] $xdoc = Get-Content $file $xdoc.h1.MyNode $xdoc.h1.h2.MyNode $xdoc.h1.h3.MyNode ... 但它似乎并不是最好的方式.应该有更好的东西. 解决方法
你试图在这里做不同的事情,所以你将无法在两个操作中使用完全相同的代码.
在第一个示例中,您要选择名为MyNode的所有节点的值.选择具有XPath expression // MyNode的节点并展开其#text属性.有多种方法可以做到这一点,例如 Select-Xml -XPath '//MyNode' -Path 'C:pathtofirst.xml' | Select-Object -Expand Node | Select-Object -Expand '#text' 或者将文件作为 [xml]$xml = Get-Content 'C:pathtofirst.xml' $xml.SelectNodes('//MyNode') | Select-Object -Expand '#text' 在第二个示例中,您希望从具有此特定属性的所有节点中选择属性MyArgument的值.使用XPath表达式// @ MyArgument选择所有属性MyArgument,然后像以前一样展开它们的值,如下所示: Select-Xml -XPath '//@MyArgument' -Path 'C:pathtosecond.xml' | Select-Object -Expand Node | Select-Object -Expand '#text' 或者像这样: [xml]$xml = Get-Content 'C:pathtosecond.xml' $xml.SelectNodes('//@MyArgument') | Select-Object -Expand '#text' 边注: $xml = New-Object System.Xml.XmlDocument $xml.load('C:pathtoyour.xml') 和 [xml]$xml = Get-Content 'C:pathtoyour.xml' 做同样的事情,所以使用其中一个,而不是两个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |