我试图根据父节点的属性从子节点中选择一个值(由于父节点的名称相似)。我需要根据父代属性(ID)从节点获取所有值。
因此,对于每条记录,我都需要相应的值(RECORD / FIELD / DATA / VALUE)。
XML:
<PAGE id="8">
<RECORD>
<GUID>83704498-6ee6-4705-9280-0f0fe90e1148</GUID>
<FIELD id="21">
<DATA>
<GUID>4a2bd78d-beab-4508-af76-0d14fe290709</GUID>
<VALUE>Certificate 1</VALUE>
</DATA>
</FIELD>
<FIELD id="22">
<DATA>
<VALUE>2015-01-20</VALUE>
</DATA>
</FIELD>
<RECORD>
<GUID>83704498-6ee6-4705-9280-0f0fe90e1148</GUID>
<FIELD id="21">
<DATA>
<GUID>4a2bd78d-beab-4508-af76-0d14fe290709</GUID>
<VALUE>Certificate 2</VALUE>
</DATA>
</FIELD>
<FIELD id="22">
<DATA>
<VALUE>2015-01-20</VALUE>
</DATA>
</FIELD>
</RECORD>
</PAGE>
Powershell:
$record = $XML.SelectNodes('//PAGE/RECORD') | Select-Object @{'Name' = 'records' ; 'Expression' = {
$_.FIELD.DATA.VALUE} }, GUID
$recordString = ($record | Out-String)
write-host $recordString
此输出为我提供了正确的值和GUID,但我从所有“ FIELDS”中获取了值,但是我只需要属性ID = 21的字段中的值。
答案 0 :(得分:3)
使用另一个XPath表达式仅将FIELD
下的id=21
下的DATA节点作为目标:
$XML.SelectNodes('//PAGE/RECORD') | Select-Object @{
'Name' = 'records'
'Expression' = {
$_.SelectNodes('FIELD[@id="21"]/DATA/VALUE').innerText
}
}, GUID