如何使用 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
我有一个 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"
谁能帮帮我,谢谢
您可以
$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