使用不同属性作为Powershell中的键获取一个XML属性的值

使用不同属性作为Powershell中的键获取一个XML属性的值,xml,powershell,attributes,selectsinglenode,Xml,Powershell,Attributes,Selectsinglenode,做一些简单的事情我真的迷路了。我需要扫描几千个文件,在每个文件中找到几个特定的项目。对于下面的xml文件,我试图获取特定“属性”名称的属性“value”的内容。因此,例如,我只想获取属性名称“MY_KEY_DATA1”的值。我可以根据下面的代码选择节点,但我需要获取属性名称“MY_KEY_DATA1”的值“314159”“。在下面的代码中,我可以获取节点并将其打印出来,但是如何读取特定属性?我知道我做这件事很难,必须有一个更简单的方法 <?xml version="1.0" encodin

做一些简单的事情我真的迷路了。我需要扫描几千个文件,在每个文件中找到几个特定的项目。对于下面的xml文件,我试图获取特定“属性”名称的属性“value”的内容。因此,例如,我只想获取属性名称“MY_KEY_DATA1”的值。我可以根据下面的代码选择节点,但我需要获取属性名称“MY_KEY_DATA1”的值“314159”“。在下面的代码中,我可以获取节点并将其打印出来,但是如何读取特定属性?我知道我做这件事很难,必须有一个更简单的方法

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mydevice xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" dosid="02073" id="" name="MyTargetName">
<manager name="Module 1">
</manager>
<manager name="Module 2">
</manager>
<misc  name="Misc Name">
</misc>
<manager name="Module ABC">
</manager>
<modules>
<module group="Group1" name="name1">
</module>
<module group="Group2" name="name2">
</module>
<module group="Memory" name="myname">
<misc_data name= "MISC_DATA"  value = "42"/>
<property name="MY_KEY_DATA1" value="314159"/>
<property name="USELESS_DATA1" value="2"/>
<property name="MY_KEY_DATA1" value="2718"/>
</module>
</modules>
</mydevice>

一旦有了
XmlDocument
类型,就可以选择目标节点,然后直接访问其属性。当需要一个节点时,可以使用
SelectNodes
(当可能有多个节点时)或
SelectSingleNode
。XPATH值将缩小到包含目标属性值的特定节点。然后,您可以使用成员访问操作符
访问属性值

$Testfile = 'xmltest2.xml'
$xml = [xml](Get-Content $Testfile)
$xml.SelectNodes("//modules/module[@group='Memory']/property[@name='MY_KEY_DATA1']").value

您可以使用
$xml.SelectNodes(“//modules/module[@group='Memory']]/property[@name='MY\u KEY\u DATA1']”)。value
允许我向新来者提供标准建议:如果答案解决了您的问题,请单击大复选标记(✓) 在它旁边,也可以选择向上投票(向上投票要求至少15个信誉点)。如果您发现其他答案有帮助,请向上投票。接受(您将获得2个信誉点)和向上投票有助于未来的读者。如果您的问题尚未完全回答,请提供反馈或建议。
$Testfile = 'xmltest2.xml'
$xml = [xml](Get-Content $Testfile)
$xml.SelectNodes("//modules/module[@group='Memory']/property[@name='MY_KEY_DATA1']").value