如果xml节点具有相同的节点名称,如何正确定位xml节点?

Sam*_*abu 2 xml powershell powershell-2.0 xml-parsing

我有一个类似于下面的xml文件.

<Parameters>
  <Parameter IsEncrypted="False">
    <ParameterName>pRdGpInstallOptions</ParameterName>
    <ParameterValue>Custom</ParameterValue>
  </Parameter>
  <Parameter IsEncrypted="False">
    <ParameterName>pRdAccept</ParameterName>
    <ParameterValue>true</ParameterValue>
  </Parameter>
  <Parameter IsEncrypted="False">
    <ParameterName>pCboEditSQLServer</ParameterName>
    <ParameterValue>MachineName\SQLEXPRESS</ParameterValue>
  </Parameter>
</Parameters>
Run Code Online (Sandbox Code Playgroud)

我这里只复制了几个节点.实际上,真实文件可能有数百个参数节点.

我们不能对索引进行硬编码,因为它可能以任何顺序出现.我正在尝试检索与参数名称关联的SQL实例名称参数值"pCboEditSQLServer".

我想使用powershell检索此值.如何解析这个动态的xml文件?

Sha*_*evy 9

$sql = $xml.Parameters.Parameter | Where-Object {$_.ParameterName -eq 'pCboEditSQLServer'}
$sql.ParameterValue

MachineName\SQLEXPRESS  
Run Code Online (Sandbox Code Playgroud)

这是使用xpath的另一个选项(应该更快):

$path = "/Parameters/Parameter[ParameterName='pCboEditSQLServer']/ParameterValue"
$xml.SelectSingleNode($path).'#text'
Run Code Online (Sandbox Code Playgroud)

还有Select-Xmlcmdlet:

$sql = $xml | Select-Xml -XPath $path 
$sql.Node.'#text'
Run Code Online (Sandbox Code Playgroud)