当前位置:  开发笔记 > Android > 正文

从XML中获取具有特定名称的所有节点的值

如何解决《从XML中获取具有特定名称的所有节点的值》经验,为你挑选了1个好方法。

我在以最有效的方式从XML获取具有特定名称的节点的所有值时遇到问题。

例如:

Node One

Note Two I dont want that

Node Three

Node Four Node Five

我想从XML获得这些值:

节点一

节点二

节点三

节点四

节点五

我希望能够用这样的代码做同样的事情:

Something I dont want

Something I dont want Something I dont want

并获得:

论据一

论点二

论据三

有任何想法吗?到目前为止,我尝试做:

$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
...

但这似乎不是最好的方法。应该有更好的东西。



1> Ansgar Wiech..:

您在这里尝试做不同的事情,因此您将无法对两个操作使用完全相同的代码。

在第一个示例中,您要选择名称为的所有节点的值MyNode。选择带有XPath表达式 的节点//MyNode并展开其#text属性。有多种方法可以执行此操作,例如Select-Xml,使用@PetSerAl建议:

Select-Xml -XPath '//MyNode' -Path 'C:\path\to\first.xml' |
  Select-Object -Expand Node |
  Select-Object -Expand '#text'

或通过将文件作为XmlDocument对象导入并使用其SelectNodes()方法:

[xml]$xml = Get-Content 'C:\path\to\first.xml'
$xml.SelectNodes('//MyNode') | Select-Object -Expand '#text'

在第二个示例中,您MyArgument要从具有该特定属性的所有节点中选择属性的值。使用XPath表达式//@MyArgument选择所有属性MyArgument,然后像以前一样扩展它们的值,如下所示:

Select-Xml -XPath '//@MyArgument' -Path 'C:\path\to\second.xml' |
  Select-Object -Expand Node |
  Select-Object -Expand '#text'

或像这样:

[xml]$xml = Get-Content 'C:\path\to\second.xml'
$xml.SelectNodes('//@MyArgument') | Select-Object -Expand '#text'

边注:

$xml = New-Object System.Xml.XmlDocument
$xml.load('C:\path\to\your.xml')

[xml]$xml = Get-Content 'C:\path\to\your.xml'

做同样的事情,所以不要使用两者之一。


恕我直言,除了选择具有属性的元素外,您还可以自己选择属性:`// @ MyArgument`。
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有