如何使用 PowerShell 获取 XML 的元素?

How to get element of XML using PowerShell?

我有一个 XML 这样的文件

<Data>
     <family no="1309" description="date">
               <desc name="rt1" code="10.010" />
               <desc name="rt2" code="10.9" />
               <desc name="b2" code="17.4" />
               <desc name="E1" code="12.15" />
               <desc name="n3" code="2.7.1" />
     </family>
     <family no="2006" description="date">
               <desc name="rt3" code="16450.010" />
               <desc name="rt5" code="165460.9" />
               <desc name="b7" code="1736577.4" />
               <desc name="E8" code="175632.15" />
               <desc name="n0" code="2735.7.1" />
     </family>
</Data>

我想用 desc name=rt1 得到 code 的值。 我试过了,但是它总是空的。

$Def = $Read.Data.family | Where-Object {$_.no -eq "1309"} | Select-Object -ExpandProperty desc |
          Select-Object -ExpandProperty code | Where-Object {$_.name -eq "rt1"} | Select-Object -ExpandProperty code
          Write-Host "Def: $Def"

谁能帮帮我,谢谢

您可以 using xPath 然后检索另一个属性:

$a = @"
<Data>
     <family no="1309" description="date">
               <desc name="rt1" code="10.010" />
               <desc name="rt2" code="10.9" />
               <desc name="b2" code="17.4" />
               <desc name="E1" code="12.15" />
               <desc name="n3" code="2.7.1" />
     </family>
     <family no="2006" description="date">
               <desc name="rt3" code="16450.010" />
               <desc name="rt5" code="165460.9" />
               <desc name="b7" code="1736577.4" />
               <desc name="E8" code="175632.15" />
               <desc name="n0" code="2735.7.1" />
     </family>
</Data>
"@
# Load XML as xml document
$b = [xml]$a
# Use Xpath to seatch the name
$c = Select-Xml -Xml $b -XPath "//Data/family/desc[@name='rt1']"
# Show the code
$c.Node.Attributes['code'].'#text'

您可以添加一个 var 并缩短它的长度:

$name = "rt1"
( Select-Xml -Xml $b -XPath "//*/desc[@name='$name']").Node.code