如何在Powershell中以任何XML查找节点?

问题描述

我有简单的xml

<bds>
    <bd>
        <id>10</id>
        <user>john</user>
        <servers>
            <name>pc24</name> 
        </servers>
    </bd>
    <bd>
        <id>12</id>
        <user>peter</user>
        <servers>
            <name>pc25</name> 
        </servers>
    </bd>
</bds>

我想知道如何获得<name>的值,即使先前节点的结构发生了变化

也就是说,如何在不知道先前节点名称的情况下漫游XML以获取名称标签的值?

解决方法

您可以为此使用XPath:

[xml]$xml = @"
<bds>
    <bd>
        <id>10</id>
        <user>john</user>
        <servers>
            <name>pc24</name> 
        </servers>
    </bd>
    <bd>
        <id>12</id>
        <user>peter</user>
        <servers>
            <name>pc25</name> 
        </servers>
    </bd>
</bds>
"@

$xml.SelectNodes('//name').'#text'

输出

pc24
pc25