我有一个类似于下面的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>
我这里只复制了几个节点。实际上,真实文件可能有数百个参数节点。
我们无法对索引进行硬编码,因为它可能以任何顺序出现。我正在尝试检索与参数名称"pCboEditSQLServer"
关联的SQL实例名称参数值。
我想使用powershell检索此值。如何解析这个动态的xml文件?
答案 0 :(得分:8)
$sql = $xml.Parameters.Parameter | Where-Object {$_.ParameterName -eq 'pCboEditSQLServer'}
$sql.ParameterValue
MachineName\SQLEXPRESS
这是使用xpath的另一种选择(应该更快):
$path = "/Parameters/Parameter[ParameterName='pCboEditSQLServer']/ParameterValue"
$xml.SelectSingleNode($path).'#text'
还有Select-Xml
cmdlet:
$sql = $xml | Select-Xml -XPath $path
$sql.Node.'#text'
答案 1 :(得分:3)
阅读XML:
$xml = [xml](gc test.xml -Encoding utf8)
使用对象模型检索数据:
$xml.Parameters.Parameter | ? { $_.ParameterName -eq "pCboEditSQLServer" } | Select-Object -Property ParameterName, ParameterValue