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

从XML中获取具有特定名称的所有节点的值,xml,powershell,Xml,Powershell,我对从XML中获取具有特定名称的节点的所有值的最有效方法存在问题 例如: 节点一 注二 我不想那样 节点三 节点四 节点五 我想从XML中获取以下值: 节点一 节点二 节点三 节点四 节点五 我希望能够对这样的代码执行同样的操作: 我不想要的东西 我不想要的东西 我不想要的东西 并获得: 论据一 论点二 论点三 有什么想法吗?到目前为止,我试着做: $xdoc=New Object System.Xml.XmlDocument $file=解析路径C:\CompiledDynoview.xml

我对从XML中获取具有特定名称的节点的所有值的最有效方法存在问题

例如:

节点一 注二 我不想那样 节点三 节点四 节点五 我想从XML中获取以下值:

节点一 节点二 节点三 节点四 节点五 我希望能够对这样的代码执行同样的操作:

我不想要的东西 我不想要的东西 我不想要的东西 并获得:

论据一 论点二 论点三 有什么想法吗?到目前为止,我试着做:

$xdoc=New Object System.Xml.XmlDocument $file=解析路径C:\CompiledDynoview.xml $xdoc.load$文件 [xml]$xdoc=获取内容$file $xdoc.h1.MyNode $xdoc.h1.h2.MyNode $xdoc.h1.h3.MyNode ...
但这似乎不是最好的办法。应该有更好的方法。

您在这里尝试执行不同的操作,因此无法对这两个操作使用完全相同的代码

在第一个示例中,您希望选择名为MyNode的所有节点的值。使用//MyNode选择节点并展开其文本属性。有多种方法可以做到这一点,例如@PetSerAl建议:

Select-Xml -XPath '//MyNode' -Path 'C:\path\to\first.xml' |
  Select-Object -Expand Node |
  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'
或者像这样:

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-XPath'//MyNode'-Path'C:\CompiledDynoview.Xml'IMHO,而不是选择具有属性的元素,您可以只选择属性本身://@MyArgument。@PetSerAl确实可以。我想我在发帖之前已经测试过了,但显然我没有。谢谢你的提醒。相应地更新了答案。