首页 > 解决方案 > 需要从命令提示符中从 xml 中提取属性值

问题描述

需要从 XML 中提取属性 1'st HouseNo 属性并在变量中使用该属性以在另一批次中重用。

我尝试过使用 findstr 但无法需要特定值。我的 XML 如下所示。

<Homes>
<Home>
    <House id="R91958E89-39D6-467C-A149-1674CA7A6D6E" Address="XYZ" MEMBER="10"/>

……

标签: powershellbatch-filecommand-prompt

解决方案


从字面上看,有大量的示例脚本,整个网络上都有解释和展示如何处理这个用例的文档......

示例:https ://www.red-gate.com/simple-talk/sysadmin/powershell/powershell-data-basics-xml

...包括本网站上的讨论。

尽管 XML 片段并不完整,您确实应该提供一个更完整的片段,但可以假设它会是什么样子。

除此之外,你没有展示你真正尝试过的东西,这意味着你的全部代码工作,你应该让我们真正能够指导你。

尽管如此,PowerShell 有内置的 XML cmdlet 来处理 XML 文件......

Get-Command -Name '*xml*' | ft -a

CommandType Name              Version Source
----------- ----              ------- ------
Cmdlet      ConvertTo-Xml     3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet      Convert-XMLtoJSON 5.0.0.1 Sorlov.PowerShell
Cmdlet      Export-Clixml     3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet      Import-Clixml     3.1.0.0 Microsoft.PowerShell.Utility

# Get examples of how to use Select-Xml
Get-Help -Name Select-Xml -Examples

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-xml?view=powershell-6

($MyXml | Select-Xml -XPath "//House").Node.id

# Results
R91958E89-39D6-467C-A149-1674CA7A6D6E

...或者您可以为它们使用 .Net 名称空间,然后挑选您想要的数据。

[xml]$MyXml = @"
<Homes>
<Home>
    <House id="R91958E89-39D6-467C-A149-1674CA7A6D6E" Address="XYZ" MEMBER="10"/>
</Home>    
</Homes>
"@ 

# Get the house id
$MyXml.Homes.Home.House.id

# Or 
$MyXml.SelectSingleNode('//House').id

# Results for both commands
R91958E89-39D6-467C-A149-1674CA7A6D6E

推荐阅读