【发布时间】:2020-04-07 19:40:28
【问题描述】:
我真的迷失了做一些简单的事情。我需要扫描几千个文件以查找每个文件中的几个特定项目。使用下面的 xml 文件,我试图获取属性“值”的内容,用于特定的“属性”名称。例如,我只想获取属性名称“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>
--
$Testfile = 'xmltest2.xml'
$xml = [xml](Get-Content $Testfile)
$myNode2 = $xml.SelectSingleNode("//modules/module[@group='Memory']")
Write-Output $myNode
Foreach ($xmlProperty in $myNode) {
}
【问题讨论】:
-
你可以使用
$xml.SelectNodes("//modules/module[@group='Memory']/property[@name='MY_KEY_DATA1']").value -
请允许我给你一个标准的建议给新手:如果一个答案解决了你的问题,请accept it点击它旁边的大复选标记(✓),也可以选择投票(投票至少需要 15 个声望点)。如果您发现其他答案有帮助,请给他们投票。接受(您将获得 2 个声望点)和投票可以帮助未来的读者。如果您的问题尚未得到完全解答,请提供反馈或self-answer。
标签: xml powershell attributes selectsinglenode